如何将功能添加到列表中

时间:2014-03-11 14:08:05

标签: python

我尝试寻找答案但找不到答案。

我正在尝试将已定义的一些函数添加到列表中,然后让列表吐出该函数。 最终,我希望列表能够随机分配要运行的功能。 但就目前而言,我只想知道如何添加该功能。

这是我到目前为止所拥有的。

#!/usr/bin/python

def question_1():
    print "This is question 1"
    print "Please in put your answer for question 1"
    raw_input()
    print "Thanks"

def question_2():
    print "This is question 2"
    print "Please in put your answer for question 2"
    raw_input()
    print "Thanks"


tier_1_questions = [question_1(), question_2()]
print tier_1_questions[0]

首先,我只是试图打印问题1,但它仍然打印出两个问题。即使我删除了最后一行代码,它仍然是打印出来的,这很奇怪..我真的很感激这方面的帮助。谢谢!

3 个答案:

答案 0 :(得分:4)

Python函数是对象。括号只是你调用它们的方式。如果删除括号,它们只是命名对象。

>>> def foo():
...   pass
... 
>>> def bar():
...   pass
... 
>>> [foo, bar]
[<function foo at 0x10fe9b9b0>, <function bar at 0x10fe9bde8>]

要从列表中调用它们,只需添加括号:

>>> def baz():
...   print("hello, world")
... 
>>> [foo, baz, bar][1]()
hello, world

答案 1 :(得分:1)

省略parens:

tier_1_questions = [question_1, question_2]

如果包括括号,则执行函数体。这就是为什么即使在您删除print tier_1_questions[0]之后仍然会看到正在打印的问题。

要评估该功能,您将执行以下操作:tier_1_questions[0]()。或者,评估列表中的每个函数,例如:

for question in tier_1_questions:
    question()

答案 2 :(得分:0)

你应该写:

tier_1_questions = [question_1, question_2]

而不是

tier_1_questions = [question_1(), question_2()]

question_1()表示您正在执行该函数,因此列表中存储的是结果,而不是函数,在您的情况下它是None,因为您的函数没有任何返回值。