随机执行一个函数

px0*_*x06 5 python random function

考虑以下功能:

def a():
    print "a"
def b():
    print "b"
Run Code Online (Sandbox Code Playgroud)

有没有办法选择一个随机运行的函数?我试过用:

random.choice([a(),b()])
Run Code Online (Sandbox Code Playgroud)

但它返回两个函数,我只想让它返回一个函数.

iCo*_*dez 14

仅调用所选功能,而不是两者:

random.choice([a,b])()
Run Code Online (Sandbox Code Playgroud)

以下是演示:

>>> import random
>>> def a():
...     print "a"
...
>>> def b():
...     print "b"
...
>>> random.choice([a,b])()
a
>>> random.choice([a,b])()
b
>>>
Run Code Online (Sandbox Code Playgroud)

您的旧代码在创建列表时调用了这两个函数[a(),b()],导致Python同时打印ab.之后,它告诉random.choice从列表[None, None]1中选择,它什么都不做.您可以从下面的演示中看到:

>>> [a(),b()]
a
b
[None, None]
>>>
Run Code Online (Sandbox Code Playgroud)

然而,新代码用于random.choice从列表中随机选择一个函数对象[a,b]:

>>> random.choice([a,b])
<function b at 0x01AFD970>
>>> random.choice([a,b])
<function a at 0x01AFD930>
>>>
Run Code Online (Sandbox Code Playgroud)

然后它只调用该函数.


1None默认情况下返回功能.既然ab缺乏return语句,它们都会返回None.