使用random.seed()时建议的种子值是什么?
这是个简单的问题:
我正在使用Python的随机模块来生成随机整数。我想知道在random.seed()函数中应该使用什么值比较好?现在我让它默认使用当前时间,但这并不是最理想的选择。看起来像字符串常量(类似于密码)也不太理想/强大。
有什么建议吗?
谢谢,
-aj
更新:
我生成随机整数的原因是为了生成测试数据。这些数字不需要是可重复的。
5 个回答
3
设置种子是为了让结果可以重复,而不是为了安全。如果你使用固定的种子,反而会让系统变得不那么安全,因为这样的话,种子不会变化。
5
在大多数情况下,使用当前时间就足够了。不过,有时候你需要用一个固定的数字来生成伪随机数,以便进行比较。
14
根据关于 random.seed
的说明:
如果你没有提供参数 x,或者提供的是 None,那么系统会使用当前的时间;当你第一次导入这个模块时,也会用当前的时间来初始化生成器。如果操作系统提供了随机性来源,它们会被用来代替系统时间(关于可用性,详细信息可以查看
os.urandom()
函数)。
如果你不传递任何东西给 seed,它会尝试使用操作系统提供的随机性来源 而不是时间,这通常是更好的选择。这可以省去你一些工作,而且效果也差不多。关于可用性,os.urandom
的文档告诉我们:
在类 UNIX 系统上,它会查询 /dev/urandom,而在 Windows 上,它会使用 CryptGenRandom。
跨平台的随机种子是这里的主要优势;你可以安全地省略种子,并相信在几乎所有你会使用 Python 的平台上,它会是 足够随机 的。即使 Python 退回到使用时间,猜测种子的时间窗口也可能只有一毫秒(或更少)。我认为即使使用当前时间也不会有什么问题——即便如此,这也只是一个备用方案。