考虑以下功能:
def a():
print "a"
def b():
print "b"
有没有办法选择一个随机运行的函数?我尝试使用:
random.choice([a(),b()])
但它返回两个函数,我只想让它返回一个函数。
答案 0 :(得分: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]
1 中选择,它什么都不做。您可以从下面的演示中看到这一点:
>>> [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>
>>>
然后只调用该函数。
1 默认情况下,函数返回None
。由于a
和b
缺少return语句,因此每个都返回None
。
答案 1 :(得分:0)
这是你想要的吗?
random.choice([a,b])()