2009-05-03 109 views

回答

17

“使用源代码,卢克!” ... ;-)。学习http://svn.python.org/view/python/trunk/Lib/random.py?revision=68378&view=markup会迅速向你保证;-)。

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

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 

显然使用了相同的底层随机数发生器,因为每个其他方法,因此受到播种或缺乏相同的影响(实际上,它将如何完成?)

+0

链接已经死了:( – 2017-09-29 02:51:12

6

a)它典型地使用系统时钟,某些系统上的时钟可能只有ms精度,所以很快种子就会产生相同的值。

seed(self,a = None) 从可哈希对象初始化内部状态。

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

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

Random Docs

相关问题