2012-06-17 3 views
12

파이썬에서는 특정 시드를 사용하여 임의의 숫자를 생성하지만 전역 상태를 다시 시드하지 않고 가장 좋은 방법은 무엇입니까? Java에서는 다음과 같이 간단히 쓸 수 있습니다."새로운 임의()"와 같이 임의로 시드를 설정하십시오.

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

표준 및 Math.random()은 영향을받지 않습니다. 파이썬에서 볼 수있는 최상의 솔루션은 다음과 같습니다.

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

이 관용적 Python입니까? 오래된 시드를 "복원"할 필요가없는 Java 솔루션보다 훨씬 깨끗합니다. 나는 이것을 할 수있는 더 좋은 방법이 있는지 알고 싶다.

답변

22

Random 개체를 인스턴스화 할 수 있습니다.

myrandom = random.Random(myseed) 

random 모듈은 myrandom의 변경에 의해 영향을받지 않습니다 Random의 자체 인스턴스를 관리합니다.

+0

어떻게 든 [임의의 문서] (http://docs.python.org/library/random.html)에서이 주석을 놓쳤습니다. "자신이 만든 인스턴스를 인스턴스화하여 공유 상태. " 감사! –

+2

@BenAlpert, 예, 내가 다시 확인하려고했을 때도했습니다. 그러나 나는 이전에'dir (random)'에서'Random'을 본 것을 알고 있었고, 나는 그것을 보았을 때 소스에있었습니다. 'Random' 클래스 자체가 문서에 자체 리스팅을 가지고 있지 않은 이유를 확신하지 못합니다. – senderle

+0

[내 자신을 포함하여] 문서에 무엇이 있는지 지적하기 위해 많은 사람이 투표를 많이받는 것은 항상 저에게 놀라운 일입니다. (http://stackoverflow.com/a/3909907/355230). 그것을 읽음으로써 대답 될 수있는 질문에 대해서도 마찬가지입니다 ... – martineau

관련 문제