2012-06-17 2 views
12

В Python, что является лучшим способом генерации некоторого случайного числа с использованием определенного семени, но без повторного глобального состояния? В Java, вы могли бы просто написать:Установите случайное семя временно, например «new Random()»

Random r = new Random(seed); 
r.nextDouble(); 

и стандарт Math.random() не будут затронуты. В Python лучшее решение, которое я вижу, это:

old_state = random.getstate() 
random.seed(seed) 
random.random() 
random.setstate(old_state) 

Это идиоматический Python? Это кажется намного менее чистым, чем Java-решение, которое не требует «восстановления» старого семени. Мне бы хотелось узнать, есть ли лучший способ сделать это.

ответ

22

Вы можете создать свой собственный объект Random.

myrandom = random.Random(myseed) 

random модуль управляет свой экземпляр Random, который будет не зависит от изменений, внесенных в myrandom.

+0

К сожалению, я пропустил этот комментарий к [случайным документам] (http://docs.python.org/library/random.html): «Вы можете создавать собственные экземпляры Random для генерации генераторов, которые не доля государства ". Благодаря! –

+2

@BenAlpert, да, я тоже, когда я пошел проверять их дважды. Но я знал, что раньше видел «Случайный» в «dir (random)», и он был там в источнике, когда я смотрел. Не уверен, почему сам класс «Random» не имеет собственного листинга в документах. – senderle

+0

Мне всегда приятно, когда кто-то получает много голосов, просто указывая, что находится в документации ... включая [я] (http://stackoverflow.com/a/3909907/355230). То же самое касается вопросов, на которые можно было бы ответить, читая его ... – martineau

 Смежные вопросы

  • Нет связанных вопросов^_^