代码之家  ›  专栏  ›  技术社区  ›  AJ.

与random.seed()一起使用的建议seed值是什么?

  •  4
  • AJ.  · 技术社区  · 15 年前

    简单的问题:

    我使用python随机模块生成随机整数。我想知道与random.seed()函数一起使用的建议值是什么?目前我让这个默认设置为当前时间,但这并不理想。似乎字符串文字常量(类似于密码)也不是理想的/strong

    建议?

    谢谢, -AJ公司


    更新:

    我生成随机整数的原因是为了生成测试数据。这些数字不需要是可复制的。

    5 回复  |  直到 15 年前
        1
  •  13
  •   Jed Smith    15 年前

    根据文件 random.seed :

    如果省略x,或 没有 ,使用当前系统时间;首次导入模块时,还使用当前系统时间初始化生成器。如果操作系统提供随机性源,则使用它们而不是系统时间(请参见 os.urandom() 有关可用性的详细信息。

    如果你不把东西传给seed,它会尝试使用操作系统提供的随机源。 而不是时间 ,这总是一个更好的赌注。这可以帮你节省一点工作,而且几乎可以做到最好。关于可用性, os.urandom 告诉我们:

    在类Unix系统上,这将查询/dev/urandom,在Windows上,它将使用cryptgenrandom。

    跨平台随机种子是这里的大赢家;您可以安全地忽略一个种子,并相信它将是 足够随机 几乎在每个平台上都使用Python。即使巨蟒回到过去,也可能只有一个毫秒(或更少)的窗口来猜测种子。不管怎样,我认为你在使用当前时间时不会遇到任何麻烦——即使那样,这也只是一种倒退。

        2
  •  5
  •   grokus    15 年前

    对于大多数情况,使用当前时间就足够了。有时,为了进行比较,您需要使用一个固定的数字来生成伪随机数。

        3
  •  3
  •   Mike Graham    15 年前

    设置种子是为了重复性,而不是安全性。如果有的话,你就建立了这个系统 较少的 有固定的种子比不断变化的种子更安全。

        4
  •  1
  •   John La Rooy    15 年前

    也许在您的例子中这不是一个问题,但是使用系统时间作为种子的一个问题是,那些大致知道系统何时启动的人可能在从序列中看到一些数字之后就能猜出您的种子(通过试验)。
    如, 不要使用系统时间作为你的在线扑克游戏的种子

        5
  •  0
  •   Francesco larlin    15 年前

    如果您使用随机方法生成测试数据,我想建议再现性是很重要的。

    想想一个用例:对于数据集X,你会得到一些奇怪的行为(比如崩溃)。结果发现,数据集X显示了一些在其他数据集Y和Z中不太明显的特性,并发现了一个已经逃过测试套件的bug。现在知道种子是有用的,这样你就可以精确地复制这个bug并修复它。