Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的Seed()和随机数_Python_Random - Fatal编程技术网

Python中的Seed()和随机数

Python中的Seed()和随机数,python,random,Python,Random,可能重复: 今天,我刚从一个比我更有经验的程序员那里听说了seed()函数。我通常只调用choice(),将列表作为参数,因为我不需要更多的随机数功能 我的程序员朋友告诉我,调用seed是必要的,因为否则Python总是以零作为默认种子开始随机数操作。这意味着,尽管这些数字看起来是随机的,但我们每次都得到相同的序列 我觉得这很奇怪。例如,choice()函数是否真的没有在执行它的操作之前调用seed?或者是它不能以编程方式更改种子的原因,因为它本身就需要选择一个随机数,而且很明显,如果我们的最

可能重复:

今天,我刚从一个比我更有经验的程序员那里听说了
seed()
函数。我通常只调用
choice()
,将列表作为参数,因为我不需要更多的随机数功能

我的程序员朋友告诉我,调用seed是必要的,因为否则Python总是以零作为默认种子开始随机数操作。这意味着,尽管这些数字看起来是随机的,但我们每次都得到相同的序列

我觉得这很奇怪。例如,
choice()
函数是否真的没有在执行它的操作之前调用seed?或者是它不能以编程方式更改种子的原因,因为它本身就需要选择一个随机数,而且很明显,如果我们的最终目标也是选择一个随机数,这是一个小问题


我在这里说了一点,但我想知道是否有人清楚这一切是如何实现的

您的朋友大错特错了,如果他阅读了
seed()函数的文档,他就会知道:

初始化基本随机数生成器。可选参数x可以是任何可哈希对象。如果省略x或无,则使用当前系统时间在首次导入模块时,当前系统时间也用于初始化生成器。如果操作系统提供了随机性源,则使用它们代替系统时间(有关可用性的详细信息,请参阅os.uradom()函数)

(我的重点。)

他是根据他在其他语言中是如何工作的知识来猜测的。提供
seed()
函数主要是为了获得可复制的伪随机数流(这对于某些特定应用是必需的)

直接从
random
模块调用的函数实际上是
random.random
类的隐藏实例方法的别名。每个实例至少实际上在其
\uuuu init\uuuu()
内调用
seed()


choice()
函数显然不会在操作之前调用
seed()
,因为这意味着在每次选择之前都要重新设定种子,这与设定种子的目的背道而驰。

这些都是您可以在文档()中学习到的内容,或者您可以在解释器中自己进行测试。尝试运行Python并执行两次
random.choice(范围(1000))
。你得到了同样的答案吗?@Michaelhofman你没抓住重点。当然,在同一个Python进程中执行两次不会得到相同的答案。正确的测试是打开两个进程,并在每个进程中进行尝试。我写得很糟糕。我的意思是整个操作(运行Python和执行函数)应该做两次。我做错什么了吗?Win7x64 Py2.7步骤1:
Ctrl-R
->
Python
Enter
。第二步:
随机导入;随机选择(范围(1000))
步骤3:重复步骤1和2。我以为每次都会不一样,但似乎都一样。更新:哦,如果我每次都将种子设置为
0
,我会得到相同的答案。我猜它每次都选择随机种子。注意:突出显示的句子已从Python 2.7和3.2+文档中删除。