2014-12-03 14 views
16

In python, e supponendo che sia su un sistema che ha un generatore di semi casuali, come faccio a ottenere random.seed() per usare l'ora del sistema? (Come se/dev/urandom non esisteva)Python: seme temporale del sistema casuale

+0

Non si può usare qualcosa come 'random.seed (time.time()'? – fredtantini

+0

Non Python ha automaticamente un seme casuale comunque? Si suppone che si debba fornire un seme solo se non lo si desidera essere casuale, ho pensato? – ArtOfWarfare

+0

Inizia l'ovvia domanda: * perché * stai cercando di evitare deliberatamente il seme superiore in favore del tempo di sistema? Questo mi urla "domanda XY" per me –

risposta

21
import random 
from datetime import datetime 
random.seed(datetime.now()) 
10

si può fare

import random 
import time 
random.seed(time.time()) 
+1

da quel link: "Se le fonti di casualità sono fornite dal sistema operativo, vengono utilizzate al posto dell'ora di sistema (vedere l'os.urandom () per i dettagli sulla disponibilità). "Questo è quello che sto cercando di evitare. – Academiphile

+0

quindi non ho capito la tua domanda, cosa stai cercando? – Elisha

+0

a stai cercando 'random.seed (time.time())'? – Elisha

0

Sai questa libreria: PyRandLib? Vedere:

https://schmouk.github.io/PyRandLib/ to easily download archives versions, and 
https://github.com/schmouk/PyRandLib to get access to the code. 

Questa libreria contiene molti dei numeri pseudo-casuali best-in-class generatori agendo esattamente come fa il Python "built-in" libreria casuale (appena un-zip o un-tar del scaricati archiviare nella sottodirectory 'Lib/site-packages /' della tua directory Python).

Dal codice e dal modulo "fastrand32.py", si otterrà un modo molto più sofisticato di alimentare casuale con una versione mescolata dell'ora corrente. A questo scopo, questa diventerebbe:

import time 
import random 

t = int(time.time() * 1000.0) 
random.seed(((t & 0xff000000) >> 24) + 
      ((t & 0x00ff0000) >> 8) + 
      ((t & 0x0000ff00) << 8) + 
      ((t & 0x000000ff) << 24) ) 

Ciò fornisce un vantaggio principale: per brevi periodi di tempo, i semi iniziali per l'alimentazione del generatore pseudo-casuale sarà enormemente differente tra due chiamate successive.