CPython的random
标准模块实现的基础PRNG是在Modules/_randommodule.c
中实现的Mersenne Twister。读取源代码后,似乎似乎先调用random.seed
会调用该源文件中定义的init_by_array
,然后依次调用init_genrand
。我想知道是否有某种方法可以绕过对init_by_array
的调用,而从Python代码中直接调用带有特定种子的init_genrand
(或者给定所需种子,构造一个Python对象,该对象可以传递给random.seed
,这样init_genrand
就会被该种子调用)。
我这样做的动机是,在提供特定种子之后,我想通过将其输出与random.getrandbits
的输出进行比较来测试自己的Mersenne Twister实现。