繁体   English   中英

python 3:random.seed():在哪里调用它?

[英]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实例,以获取不共享状态的生成器。

你可以滚动自己封装随机的单例。 然后,您可以在随机 getstate和setstate 使用Python文档来更改随机数生成器的状态。 这将为您的程序提供两个随机数生成器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM