是否可以创建一个可重复的随机数流?

2021-04-11 23:50:29 发布

您现在位置:Python中文网/ 问答频道 /正文

根据How to generate a repeatable random number sequence?可以设置随机模块的状态,这样您就可以期望对randint的后续调用返回相同的数字。在

我看到这种方法的一个限制是,状态是在模块级别设置的(本质上是一个全局变量),因此似乎不可能用当前机制创建几个随机数的流/迭代器,这些流/迭代器可以用当前机制重复(但流的调用可以任意交错)。是否有任何解决方法/替代库来实现这一点?在

2条回答
网友
1楼 ·

它不必在模块级别维护状态参见^{} module的文档:

The functions supplied by this module are actually bound methods of a hidden instance of the random.Random class. You can instantiate your own instances of Random to get generators that don’t share state. This is especially useful for multi-threaded programs, creating a different instance of Random for each thread, and using the jumpahead() method to make it likely that the generated sequences seen by each thread don’t overlap.

网友
2楼 ·

random.Random()就是你要找的。在

http://hg.python.org/cpython/file/2.7/Lib/random.py#l72

所有random.*模块级函数都只是位于random._inst的共享Random()实例的代理。在

http://hg.python.org/cpython/file/2.7/Lib/random.py#l879

对于您的情况,您所要做的就是实例化Nrandom.Random()实例;它们将具有独立的内部RNG状态,并且可以在不影响彼此的情况下播种/使用。在

事实上,我认为为非平凡的应用程序创建自己的Random()实例是一种最佳实践,特别是在出现依赖于状态的bug时,可以很容易地使其可重复,等等。特别是在测试套件中,这是非常宝贵的。在

相关问题