[英]python 3: random.seed(): where to call it?
我需要确保程序中的所有随机性都是完全可复制的。 我应该在哪里拨打random.seed()?
我认为它应该在我的main.py
模块中,但是它导入了碰巧使用随机函数的其他模块。
我可以仔细浏览我的导入,看看哪一个是第一个执行,但是当我改变我的代码结构时,我将不得不记得再次重做这个分析。
有没有简单安全的解决方案?
在主模块的“导入部分”中执行代码实际上是安全的,因此如果您不确定导入可能使用或不使用随机模块的其他模块,可能绕过您的种子,您当然可以使用类似的东西
import random
random.seed(seed_value)
import something
import else
if __name__ == "__main__":
main()
如果你想随机可复制,最好在应用程序中random.Random
实例,在该实例上调用seed()
,并将该实例用于随机数。
random.random()
实际上使用random.Random
类的单例,以方便那些不在乎自己创建类实例的人。 但是,该单例可能与其他可能想要调用random.random()
以生成随机数的模块共享。 这就是为什么在你的情况下你最好实例化你自己的random.Random
实例。
引用文档 :
该模块提供的函数实际上是
random.Random
类的隐藏实例的绑定方法。 您可以实例化您自己的Random
实例,以获取不共享状态的生成器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.