从列表中调用随机函数的语法

时间:2011-03-28 21:46:11

标签: python

从这个帖子: 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...

这三个函数都被调用和打印。

有人可以用正确的语法帮我解决这个问题吗?谢谢。

3 个答案:

答案 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)()调用随机函数