2014-10-29 2 views
5

Considerate le seguenti funzioni:eseguire una funzione in modo casuale

def a(): 
    print "a" 
def b(): 
    print "b" 

C'è un modo per scegliere una funzione per eseguire in modo casuale? Ho provato a utilizzare:

random.choice([a(),b()]) 

ma restituisce entrambe le funzioni, voglio solo che restituisca una funzione.

risposta

14

solo chiamare la funzione selezionata, non entrambi:

random.choice([a,b])() 

Qui di seguito è una dimostrazione:

>>> import random 
>>> def a(): 
...  print "a" 
... 
>>> def b(): 
...  print "b" 
... 
>>> random.choice([a,b])() 
a 
>>> random.choice([a,b])() 
b 
>>> 

il vecchio codice chiamato entrambe funzioni quando la lista [a(),b()] è stato creato , facendo in modo che Python stampi sia a sia b. Successivamente, ha comunicato allo random.choice di scegliere dall'elenco [None, None] , che non fa nulla. Si può vedere questo dalla dimostrazione di seguito:

>>> [a(),b()] 
a 
b 
[None, None] 
>>> 

Il nuovo codice però utilizza random.choice per selezionare casualmente un oggetto funzione dalla lista [a,b]:

>>> random.choice([a,b]) 
<function b at 0x01AFD970> 
>>> random.choice([a,b]) 
<function a at 0x01AFD930> 
>>> 

Si chiama allora solo quella funzione.


Le funzioni restituiscono None per impostazione predefinita. Poiché a e mancano dichiarazioni di ritorno, ciascuna restituisce None.

+0

Non so come ho perso che, funziona a meraviglia, grazie! – px06

+1

Woah !! Python è così fantastico !!! –

0

E 'quello che vuoi?

random.choice([a,b])()