【发布时间】:2014-05-03 14:11:42
【问题描述】:
我对@987654321@ 在 Python 中的作用有点困惑。例如,为什么以下试验会(始终如一地)做他们所做的事情?
>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7
我找不到这方面的好文档。
【问题讨论】:
-
随机数生成并不是真正的“随机”。它是确定性的,它生成的序列由您传递给
random.seed的种子值决定。通常您只需调用random.seed(),它使用当前时间作为种子值,这意味着无论何时运行脚本,您都会得到不同的值序列。 -
将相同的种子传递给随机数,然后调用它会得到相同的一组数字。这是按预期工作的,如果您希望每次结果都不同,则每次启动应用程序时都必须使用不同的内容(例如 /dev/random 或 time 的输出)
-
种子是提供给 RNG 以生成第一个随机数的。在那之后,他们的RNG是自给自足的。因此,您不会始终看到相同的答案。如果再次运行此脚本,您将获得相同的“随机”数字序列。如果您想重现结果,设置种子会很有帮助,因为生成的所有“随机”数字总是相同的。
-
值得一提:这篇文章中显示的序列是在 Python 2 中。Python 3 给出了不同的序列。
-
@Blink 对“随机数”的使用具有误导性。 RNG 有一个自给自足的内部状态。从这个内部状态,导出 randint(1,10) 和其他调用的输出。如果 RNG 从 randint(1,10) 的输出中输入,则序列将折叠为最多 10 个序列中的 1 个,并且该序列将在最多 10 个数字后重复。
标签: python random random-seed