从这个帖子: How do I perform a random event in Python by picking a random variable?
我了解到可以将一些函数放入列表中,并使用random.choice()
调用其中一个来生成随机事件。
我对此感兴趣,因为我正在编写一个相当小的基于文本的游戏,作为初学者教程的一部分。
但是当我写下我认为会给我想要的结果时(也就是说,只调用其中一个函数并打印它的字符串:
import random
def func_test_1():
print "This is func_test_1."
def func_test_2():
print "This is func_test_2."
def func_test_3():
print "This is func_test_3."
my_list = [func_test_1(), func_test_2(), func_test_3()]
random.choice(my_list)
我得到了这个结果:
C:\Windows\system32\cmd.exe /c python random_func.py
This is func_test_1.
This is func_test_2.
This is func_test_3.
Hit any key to close this window...
这三个函数都被调用和打印。
有人可以用正确的语法帮我解决这个问题吗?谢谢。
答案 0 :(得分:34)
使用括号,您可以调用该函数。你想要的是将它们分配到列表并稍后调用选择:
my_list = [func_test_1, func_test_2, func_test_3]
random.choice(my_list)()
答案 1 :(得分:8)
首先,当你执行my_list = [func_test_1(), func_test_2(), func_test_3()]
时,存储功能结果,而不是列表中的功能。改为my_list = [func_test_1, func_test_2, func_test_3]
,然后调用随机函数。像这样:
my_list = [func_test_1, func_test_2, func_test_3]
random.choice(my_list)()
答案 2 :(得分:6)
函数是Python中的对象。
如果你只是通过他们的名字引用它们(没有括号,实际上调用函数!),你可以参考底层的函数对象。您可以重新绑定它们,检查它们或在列表中存储对它们的引用。
mylist = [test_func_1,test_func_2,..]
此时,没有执行任何功能。然后,您可以使用random.choice
从列表中选择一个函数,并使用()
调用它:
mylist[0]()
调用列表中的第一个函数random.choice(mylist)()
调用随机函数