从列表问题中调用函数

时间:2014-04-05 02:24:23

标签: python

我正在制作一个涉及从列表中调用函数的项目,但我不能让它直接工作。从列表中调用函数有一些问题,我似乎无法弄清楚原因。我在下面有一些代码作为示例,并且还将提供输出。提供的代码只是我想要做的基本想法的一个例子。这不是我的实际代码。不过不要担心,这是基本的想法。

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

就我所知,这可能是我忽略的一些简单错误,但对于我的生活,无法弄清楚。救命啊!

3 个答案:

答案 0 :(得分:3)

" word1()"不是函数word1;它取而代之的是调用word1()的返回值,因为word1没有显式返回任何内容,因此Noneword1。什么' 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)