如何最好地初始化函数中python的随机模块

如何最好地初始化函数中python的随机模块,python,random,random-seed,Python,Random,Random Seed,我正在寻找一些关于生成尽可能多的随机数的信息,当随机模块嵌入到如下函数中时: import random as rd def coinFlip() flip = rd.random() if flip > .5: return "Heads" else: return "Tails" main() for i in range(1000000): print(coinFlip()) 编辑:理想情况下,

我正在寻找一些关于生成尽可能多的随机数的信息,当随机模块嵌入到如下函数中时:

import random as rd

def coinFlip()
    flip = rd.random()

    if flip > .5: 
        return "Heads"
    else:
        return "Tails"

main()
    for i in range(1000000):
        print(coinFlip())
编辑:理想情况下,上面的脚本总是会产生不同的结果,因此限制了我使用random.seed的能力

函数中嵌入的随机模块是否在每次调用函数时使用新种子进行初始化?而不是使用先前生成的随机数作为种子

如果是的话

考虑到for循环中的系统时间非常接近,甚至可能相同,这取决于系统时间的精度,系统时间上的默认初始化是否足够精确,从而得出一个真正的随机数

有没有办法在函数外部初始化一个随机模块,并让函数拉取下一个随机数,以避免多次初始化

还有其他更像蟒蛇的方法来实现这一点吗

多谢各位

如果要初始化伪随机数生成器,请使用random.seed

你可以看看

如果不使用 random.seed,内部随机生成器调用seed函数并 使用当前系统当前时间值作为种子值。这就是为什么 每当我们执行random.random时,我们总是得到一个不同的值

如果您希望始终有一个diff编号,则不必费心初始化随机模块,因为在内部,它使用的随机模块默认为当前系统时间,它始终是diff。 只需使用:

from random import random 

def coinFlip()

    if random() > .5: 
        return "Heads"
    else:
        return "Tails"
为了更清楚地说明,random模块不是每次使用时才初始化的,而是在导入时初始化的,因此每次调用random.random时,都会有下一个保证不同的数字

如果要初始化伪随机数生成器,请使用random.seed

你可以看看

如果不使用 random.seed,内部随机生成器调用seed函数并 使用当前系统当前时间值作为种子值。这就是为什么 每当我们执行random.random时,我们总是得到一个不同的值

如果您希望始终有一个diff编号,则不必费心初始化随机模块,因为在内部,它使用的随机模块默认为当前系统时间,它始终是diff。 只需使用:

from random import random 

def coinFlip()

    if random() > .5: 
        return "Heads"
    else:
        return "Tails"
更清楚地说,random模块不是每次使用时才初始化的,而是在导入时初始化的,因此每次调用random.random时,您都会得到下一个数字,该数字对于初学者来说肯定是不同的

该模块为各种分布实现伪随机数生成器

[……]

此模块提供的函数实际上是random.random类的隐藏实例的绑定方法。您可以实例化自己的Random实例,以获得不共享状态的生成器

随机模块是一个伪随机数生成器。所有PRNG都是完全确定的,并且具有状态。也就是说,如果PRNG处于相同的状态,则下一个随机数将始终相同。如上所述,您的rd.random调用实际上是对隐式实例化的随机对象的调用

因此:

函数中嵌入的随机模块是否在每次调用函数时使用新种子进行初始化

没有

有没有办法在函数外部初始化一个随机模块,并让函数拉取下一个随机数,以避免多次初始化

您不需要避免多次初始化,因为它不会发生。如果希望精确控制状态,可以实例化自己的随机对象

随机分类。随机[种子] 类,该类实现随机模块使用的默认伪随机数生成器

random.seeda=None,version=2 初始化随机数生成器。如果省略或无,则使用当前系统时间。[……]

因此,隐式实例化的随机对象使用系统时间作为初始种子,并从那里保持状态。因此,每次启动Python实例时,都会对其进行不同的种子设定,但只会进行一次种子设定。

对于初学者:

该模块为各种分布实现伪随机数生成器

[……]

此模块提供的函数实际上是random.random类的隐藏实例的绑定方法。您可以实例化自己的Random实例,以获得不共享状态的生成器

随机模块是一个伪随机数生成器。所有PRNG都是完全确定的,并且具有状态。也就是说,如果PRNG处于相同的状态,则下一个随机数将始终相同。正如上面一段所解释的,你的rd.random呼叫实际上是对im的呼叫 正确实例化的随机对象

因此:

函数中嵌入的随机模块是否在每次调用函数时使用新种子进行初始化

没有

有没有办法在函数外部初始化一个随机模块,并让函数拉取下一个随机数,以避免多次初始化

您不需要避免多次初始化,因为它不会发生。如果希望精确控制状态,可以实例化自己的随机对象

随机分类。随机[种子] 类,该类实现随机模块使用的默认伪随机数生成器

random.seeda=None,version=2 初始化随机数生成器。如果省略或无,则使用当前系统时间。[……]


因此,隐式实例化的随机对象使用系统时间作为初始种子,并从那里保持状态。因此,每次启动Python实例时,都会对其进行不同的种子设定,但只会进行一次种子设定。

我认为这不会起作用,尤其是如果将其放入函数中,因为每次运行此脚本时,随机数都会以相同的方式生成。此外,如果将random.seed放在函数本身的rd.random之前,则生成的随机数将始终相同。如果我错了,请纠正我。是的,通常,这就是你想要初始化随机模块的原因,要有相同的随机数,如果你不想有相同的随机数,那么你不应该初始化随机模块,所以你想要总是有不同的数?正确。我将对问题进行编辑以包含该事实。很抱歉,一开始我没有。也许现在,我的答案更适合您的问题顺便说一句,更清楚地说,随机模块不是每次使用时都初始化的,只是在导入时,因此,每次调用random.random时,您都会得到下一个保证不同的数字。我不认为这会起作用,尤其是如果将其放入函数中,因为每次运行此脚本时,随机数都会以相同的方式生成。此外,如果将random.seed放在函数本身的rd.random之前,则生成的随机数将始终相同。如果我错了,请纠正我。是的,通常,这就是你想要初始化随机模块的原因,要有相同的随机数,如果你不想有相同的随机数,那么你不应该初始化随机模块,所以你想要总是有不同的数?正确。我将对问题进行编辑以包含该事实。很抱歉,一开始我没有。也许现在,我的答案更适合你的问题顺便说一句,更清楚地说,随机模块不是每次使用它时都初始化的,只是在导入时,所以每次你打随机。随机你有下一个号码,保证是不同的谢谢你的详细答案。保持状态是我寻找的关键。我把rusu_ro1的答案标记为正确,因为正如你在那里的评论中看到的那样,他也启发了我关于州的观点。我非常感谢你在这里的工作和努力!谢谢你详细的回答。保持状态是我寻找的关键。我把rusu_ro1的答案标记为正确,因为正如你在那里的评论中看到的那样,他也启发了我关于州的观点。我非常感谢你在这里的工作和努力!