如何将函数添加到列表中

0 投票
3 回答
808 浏览
提问于 2025-04-17 21:47

我试着找答案,但没找到。

我想把一些已经定义好的函数放到一个列表里,然后再从这个列表中随机选择一个函数来执行。最终,我希望这个列表能随机决定运行哪个函数。不过现在,我只是想知道怎么把函数添加到列表里。

这是我目前的代码。

#!/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

你应该写:

tier_1_questions = [question_1, question_2]

而不是

tier_1_questions = [question_1(), question_2()]

question_1() 这段代码的意思是你在执行这个函数,所以存储在列表里的其实是执行的结果,而不是函数本身。在你的例子中,结果是 None,因为你的函数没有返回任何值。

1

只需要省略括号:

tier_1_questions = [question_1, question_2]

如果你加上括号,函数的内容就会被执行。这就是为什么即使你去掉了 print tier_1_questions[0],你还是能看到问题被打印出来。

所以,要执行这个函数,你可以这样做: tier_1_questions[0]()。或者,如果你想执行列表中的每一个函数,比如:

for question in tier_1_questions:
    question()
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

撰写回答