Какое начальное значение рекомендуется использовать с random.seed ()? - PullRequest
4 голосов
/ 09 ноября 2009

Достаточно простой вопрос:

Я использую случайный модуль Python для генерации случайных целых чисел. Я хочу знать, какое предлагаемое значение использовать с функцией random.seed ()? В настоящее время я даю это значение по умолчанию для текущего времени, но это не идеально. Кажется, что строковая литеральная константа (похожая на пароль) также не будет идеальной / сильной

Предложения

Спасибо, -Л


UPDATE:

Причина, по которой я генерирую случайные целые числа, заключается в генерации тестовых данных. Числа не должны быть воспроизводимыми.

Ответы [ 5 ]

13 голосов
/ 09 ноября 2009

Согласно документации для random.seed:

Если x опущен или Нет , используется текущее системное время; текущее системное время также используется для инициализации генератора при первом импорте модуля. Если источники случайности предоставляются операционной системой, они используются вместо системного времени (подробности о доступности см. В функции os.urandom()).

Если вы не передадите что-то для затравки, он попытается использовать предоставленные операционной системой источники случайности вместо времени , что всегда лучше. Это экономит вам немного работы и примерно так же хорошо, как и собирается. Относительно доступности, документы для os.urandom говорят нам:

В UNIX-подобных системах это будет запрашивать / dev / urandom, а в Windows - CryptGenRandom.

Кросс-платформенные случайные семена - большая победа здесь; вы можете спокойно опустить семя и поверить, что оно будет достаточно случайным почти на каждой платформе, на которой вы будете использовать Python. Даже если Python возвращается к тому времени, вероятно, есть только миллисекундное окно (или меньше), чтобы угадать начальное число. Я не думаю, что у вас все равно будут проблемы с использованием текущего времени - даже тогда, это всего лишь запасной вариант.

5 голосов
/ 09 ноября 2009

Для большинства случаев достаточно использовать текущее время. Иногда вам нужно использовать фиксированное число для генерации псевдослучайных чисел в целях сравнения.

3 голосов
/ 09 ноября 2009

Настройка семян для повторяемости, а не безопасности. Во всяком случае, вы делаете систему менее защищенной, имея фиксированное начальное число, которое постоянно меняется.

1 голос
/ 09 ноября 2009

Возможно, это не проблема в вашем случае, но одна проблема с использованием системного времени в качестве начального числа состоит в том, что тот, кто приблизительно знает, когда была запущена ваша система, может угадать ваше начальное число (пробным путем), увидев несколько числа из последовательности.
например, не используйте системное время в качестве начального числа для вашей онлайн-игры в покер

0 голосов
/ 09 ноября 2009

Если вы используете случайные значения для генерации тестовых данных, я хотел бы предположить, что воспроизводимость может быть важной.

Просто подумайте над вариантом использования: для набора данных X вы получаете странное поведение (например, сбой). Оказывается, что набор данных X показывает некоторую особенность, которая не была так очевидна из других наборов данных Y и Z, и обнаруживает ошибку, которая вырвалась из ваших тестовых наборов. Теперь знание семени полезно для точного воспроизведения ошибки и ее исправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...