2014-10-29 12 views
5

folgende Funktionen vor:Execute eine Funktion zufällig

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

Gibt es eine Möglichkeit, eine Funktion wählen zufällig laufen? Ich versuchte mit:

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

aber es gibt beide Funktionen zurück, ich möchte nur eine Funktion zurückgeben.

Antwort

14

nennen nur die ausgewählt Funktion, nicht beide von ihnen:

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

Nachfolgend finden Sie eine Demonstration:

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

Ihre alten Code beide Funktionen aufgerufen, wenn die Liste [a(),b()] erstellt wurde , wodurch Python sowohl a als auch b ausgibt. Danach sagte er random.choice aus der Liste [None, None] zu wählen, was nichts tut. Sie können diese von der Demonstration siehe unten:

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

Der neue Code random.choice jedoch verwendet zufällig aus der Liste ein Funktionsobjekt wählen [a,b]:

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

Anschließend ruft sie nur diese Funktion.


Funktionen liefern None standardmäßig. Da a und b keine Rückgabeanweisungen enthalten, geben sie jeweils None zurück.

+0

Sie wissen nicht, wie ich das verpasst, wunderbar funktioniert, danke! – px06

+1

Woah !! Python ist so toll !!! –

0

Ist es das, was Sie wollen?

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