Python随机:如果我不使用种子(someValue)会发生什么?

时间:2009-05-03 18:44:19

标签: python random seed

a)在这种情况下,随机数生成器是否在每次运行时使用系统的时钟(进行种子更改)?

b)种子是否用于生成expovariate(lambda)的伪随机值?

3 个答案:

答案 0 :(得分:17)

“使用来源,卢克!”...... ;-)。学习https://svn.python.org/projects/python/trunk/Lib/random.py会很快让你放心; - )。

没有设置种子时会发生什么(这是“我是无”的情况):

if a is None:
    try:
        a = long(_hexlify(_urandom(16)), 16)
    except NotImplementedError:
        import time
        a = long(time.time() * 256) # use fractional seconds

和expovariate:

random = self.random
u = random()
while u <= 1e-7:
    u = random()
return -_log(u)/lambd

显然使用与其他方法相同的基础随机生成器,因此受到播种或缺乏的影响相同(实际上,它还会怎样做? - )

答案 1 :(得分:6)

a)它通常使用系统时钟,某些系统上的时钟可能只有ms精度,因此非常快速地播种两次可能会产生相同的值。

  种子(自我,a =无)       从可散列对象初始化内部状态。

None or no argument seeds from current time or from an operating
system specific randomness source if available.
     

http://pydoc.org/2.5.1/random.html#Random-seed

b)我会想象expovariate,但我找不到任何证据。如果没有,那将是愚蠢的。

答案 2 :(得分:2)

  

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

Random Docs