Python random: Что произойдет, если я не использую семя (someValue)?
a) В этом случае генератор случайных чисел использует системные часы (внесение изменений семян) в каждый прогон?
b) Используется ли семя для генерации псевдослучайных значений expovariate (лямбда)?
Ответы
Ответ 1
"Используйте источник, Люк!"...;-). Изучение http://svn.python.org/view/python/trunk/Lib/random.py?revision=68378&view=markup быстро успокоит вас; -).
Что происходит, когда семя не установлено (что случай "i is None" ):
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
очевидно, использует один и тот же базовый случайный генератор, как и любой другой метод, и поэтому одинаково влияет на посев или его отсутствие (действительно, как иначе это было бы сделано?)
Ответ 2
a) Обычно он использует системные часы, часы на некоторых системах могут иметь только точность ms, поэтому семя дважды очень быстро может привести к тому же значению.
seed (self, a = None) Инициализировать внутреннее состояние из объекта hashable.
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 делает, но я не могу найти никаких доказательств. Было бы глупо, если бы не было.
Ответ 3
используется текущее системное время; текущее системное время также используется для инициализации генератора, когда модуль сначала импортируется. Если источники случайности предоставляются операционной системой, они используются вместо системного времени (см. Функцию os.urandom() для получения подробной информации о доступности).
Случайные документы