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

35 投票
3 回答
36135 浏览
提问于 2025-04-16 14:36

在这个讨论串中:

我该如何在Python中通过选择一个随机变量来执行随机事件?

我了解到,可以把一些函数放进一个列表里,然后用 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 个回答

11

在Python中,函数也是一种对象。

如果你只用函数的名字来引用它们(不加括号,因为加了括号就会调用这个函数了!),你其实是在指向这个函数的对象。你可以重新绑定它们,查看它们的属性,或者把它们存储在一个列表里。

mylist = [test_func_1,test_func_2,..]

到这个时候,这些函数都还没有被执行。接下来,你可以用random.choice从这个列表中随机选择一个函数,然后用()来调用它:

  • mylist[0]()会调用列表中的第一个函数
  • random.choice(mylist)()会随机调用一个函数
13

首先,当你写 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)()
60

用括号来调用函数。你想要的是把它们放到列表里,然后稍后再调用这个选择:

my_list = [func_test_1, func_test_2, func_test_3]
random.choice(my_list)()

撰写回答