2014-10-29 3 views
5

Рассмотрим следующие функции:Выполнить функцию случайно

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

Есть ли способ, чтобы выбрать функцию для запуска случайным образом? Я пытался использовать:

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

но он возвращает обе функции, я просто хочу, чтобы она вернула одну функцию.

ответ

14

называют только функцию выбран, но не оба из них:

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

Ниже демонстрация:

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

Ваш старый код называется оба функции, когда список [a(),b()] был создан , заставляя Python печатать как a, так и b. Впоследствии он сказал random.choice на выбор [None, None] , который ничего не делает. Вы можете увидеть это с демонстрации ниже:

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

Новый код, однако использует random.choice случайным образом выбирать объект функции из списка [a,b]:

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

Затем он вызывает только то, что функция.


Функции возвращают None по умолчанию. Поскольку a и b не имеют возвратных операторов, каждый из них возвращает None.

+0

Не знаю, как я пропустил, что работает на удивление, спасибо! – px06

+1

Woah !! Python так потрясающе !!! –

0

Это то, что вы хотите?

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

Смежные вопросы