如何将函数添加到列表中
我试着找答案,但没找到。
我想把一些已经定义好的函数放到一个列表里,然后再从这个列表中随机选择一个函数来执行。最终,我希望这个列表能随机决定运行哪个函数。不过现在,我只是想知道怎么把函数添加到列表里。
这是我目前的代码。
#!/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