Python 临时设置随机种子,如;新随机();

Python 临时设置随机种子,如;新随机();,python,random,Python,Random,在Python中,使用某个种子但不重新播种全局状态来生成某个随机数的最佳方法是什么?在Java中,您可以简单地编写: Random r = new Random(seed); r.nextDouble(); 标准的Math.random()不会受到影响。在Python中,我能看到的最佳解决方案是: old_state = random.getstate() random.seed(seed) random.random() random.setstate(old_state) 这是惯用的Py

在Python中,使用某个种子但不重新播种全局状态来生成某个随机数的最佳方法是什么?在Java中,您可以简单地编写:

Random r = new Random(seed);
r.nextDouble();
标准的
Math.random()
不会受到影响。在Python中,我能看到的最佳解决方案是:

old_state = random.getstate()
random.seed(seed)
random.random()
random.setstate(old_state)

这是惯用的Python吗?与不需要“恢复”旧种子的Java解决方案相比,它似乎要干净得多。我很想知道是否有更好的方法来实现这一点。

您可以实例化自己的对象


random
模块管理自己的
random
实例,它不受对
myrandom
所做更改的影响。Oops,不知怎的,我错过了下面的评论:“您可以实例化自己的random实例以获得不共享状态的生成器。”谢谢@BenAlpert,是的,我去复查的时候也检查过。但是我知道我以前在
dir(Random)
中看到过
Random
,当我查看源代码时,它就在那里。不知道为什么
Random
类本身在文档中没有自己的列表。当有人仅仅因为指出文档中的内容而获得了很多支持票时,我总是感到惊讶……包括。对于那些可以通过阅读来回答的问题也是如此…@martineau,我大体上同意;但对Ben Alpert公平地说,在这个特殊的案例中,信息是相当隐蔽的。此外,尽管文档确实提到了
Random
,但它们没有说明其构造函数采用的参数,而且这些信息与问题直接相关。“我承认我为自己记得这么做而感到有点骄傲。”“马蒂诺:作为比较,我最高估的答案是:。:\我喜欢在PyPy源代码中查找库源代码,但通常我会避开CPython的源代码。
myrandom = random.Random(myseed)