我有一些功能:
exec(index + 1);
我想把它们放在一个列表中,随机播放它们,然后连续给它们打电话:
def feeling():
...
def homesick():
...
def miss():
...
我的想法就是调用每个函数:
import random
prompts = [feeling, homesick, miss]
但这会抛出一个
random.shuffle(prompts)()
我做错了什么,怎样才能让它发挥作用?
答案 0 :(得分:1)
您有一项任务是随机选择其中一项功能。这是一个小型演示,你正在做什么,但是正确。
>>> f = [sum, max, min]
>>> random.shuffle(f)
>>> f.pop()([1, 2, 3]) # looks like we picked max. Alternatively, `f[0](...)`
3
或者,如果它只是你想要的一个功能,则根本不需要使用random.shuffle
。请改用random.choice
。
>>> random.choice(f)([1, 2, 3])
>>> 3
random.shuffle
执行 inplace 改组。
>>> y = list(range(10))
>>> random.shuffle(y)
>>> y
[6, 3, 4, 1, 5, 8, 9, 0, 7, 2]
因此,当您调用该函数时,不会得到任何回报。换句话说,期望None
作为回报。
此外,在对象上调用()
会调用其__call__
方法。由于NoneType
个对象没有这样的方法,因此TypeError
会出错。对于可调用的对象,您需要 -
class Foo:
def __init__(self, x):
self.x = x
def __call__(self, y):
return self.x + y
>>> f = Foo(10)
>>> f(20)
30
作为练习,请尝试删除__call__
并重新运行代码。致电f(20)
会给您带来同样的错误。