In Python, qual è il modo migliore per generare un numero casuale usando un certo seme ma senza resociare lo stato globale? In Java, si potrebbe scrivere semplicemente:Imposta temporaneamente seme casuale, come "nuovo casuale()"
Random r = new Random(seed);
r.nextDouble();
e lo standard Math.random()
non ne risentirebbe. In Python, la soluzione migliore che riesco a vedere è:
old_state = random.getstate()
random.seed(seed)
random.random()
random.setstate(old_state)
È questo Python idiomatico? Sembra molto meno pulito della soluzione Java che non richiede il "ripristino" di un vecchio seme. Mi piacerebbe sapere se c'è un modo migliore per farlo.
Oops, in qualche modo ho perso questo commento sui [documenti casuali] (http://docs.python.org/library/random.html): "Puoi istanziare le tue istanze di Random per ottenere generatori che non condividere stato. " Grazie! –
@ BenAlpert, sì, l'ho fatto anche io quando sono andato a ricontrollarli. Ma sapevo di aver visto 'Random' in' dir (random) 'prima, ed era lì nella fonte quando ho guardato. Non sono sicuro del motivo per cui la classe 'Random' stessa non ha il proprio elenco nei documenti. – senderle
È sempre fantastico per me quando qualcuno ottiene molti voti positivi solo per indicare cosa c'è nella documentazione ... incluso [me] (http://stackoverflow.com/a/3909907/355230). Lo stesso per le domande a cui avrebbe potuto rispondere leggendo ... – martineau