Если я использую функцию Python random.seed(my_seed)
в одном классе в моем модуле, останется ли это начальное значение для всех других классов, созданных в этом модуле?
Какова область действия случайного семени в Python?
Ответы (1)
Да, начальное значение установлено для (скрытого) глобального экземпляра Random()
в модуле. Из документации:
Функции, предоставляемые этим модулем, на самом деле являются связанными методами скрытого экземпляра класса
random.Random
. Вы можете создать свои собственные экземплярыRandom
, чтобы получить генераторы, которые не разделяют состояние.
Используйте отдельные экземпляры Random()
, если вам нужно хранить семена отдельно; вы можете передать новое семя при его создании:
>>> from random import Random
>>> myRandom = Random(anewseed)
>>> randomvalue = myRandom.randint(0, 10)
Класс поддерживает тот же интерфейс, что и модуль.
person
Martijn Pieters
schedule
11.09.2012
Означает ли это, что
eval( "random.random()" )
также будет чтить это семя?
- person Dilawar; 30.12.2016
@Dilawar да,
eval()
здесь не особенный; он по-прежнему использует те же пространства имен, и random
просматривается из глобальных переменных, в которых вы запускаете eval()
, находя тот же модуль.
- person Martijn Pieters; 30.12.2016
Просто для уточнения: объекты, созданные из этого класса, по-прежнему будут давать разные (для каждого объекта) значения для случайных переменных.
- person Ataxias; 04.08.2018