我正在制作一个涉及从列表中调用函数的项目,但我不能让它直接工作。从列表中调用函数有一些问题,我似乎无法弄清楚原因。我在下面有一些代码作为示例,并且还将提供输出。提供的代码只是我想要做的基本想法的一个例子。这不是我的实际代码。不过不要担心,这是基本的想法。
import random, time
def word1():
print "Hello"
def word2():
print "Goodbye"
words = [word1(), word2()]
def run():
while True:
random.choice(words)()
time.sleep(0.5)
run()
我得到的输出是:
TypeError: 'NoneType' object is not callable
就我所知,这可能是我忽略的一些简单错误,但对于我的生活,无法弄清楚。救命啊!
答案 0 :(得分:3)
" word1()
"不是函数word1
;它取而代之的是调用word1()
的返回值,因为word1
没有显式返回任何内容,因此None
。word1
。什么' word1
?它只是words
。因此,words = [word1(), word2()]
的声明应改为:
words = [word1, word2]
为:
{{1}}
答案 1 :(得分:2)
您将结果功能存储在 1 列表中,而不是函数本身。
即。改变:
words = [word1(), word2()]
为:
words = [word1, word2]
1 结果都是None
,这就是为什么你得到NoneType
无法调用的错误......
答案 2 :(得分:1)
您可以调用列表中已有的功能。你想推迟。
words = [word1, word2]
def run():
while True:
random.choice(words)()
time.sleep(0.5)