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

Don*_* B. 26 python

从这个线程: 如何通过选择随机变量在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)
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

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...
Run Code Online (Sandbox Code Playgroud)

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

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

Phi*_*ipp 38

使用括号,您可以调用该函数.你想要的是将它们分配到列表并稍后调用选择:

my_list = [func_test_1, func_test_2, func_test_3]
random.choice(my_list)()
Run Code Online (Sandbox Code Playgroud)


iko*_*tia 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)()
Run Code Online (Sandbox Code Playgroud)


Ale*_*ler 6

函数是Python中的对象.

如果你只是通过他们的名字引用它们(没有括号,它实际上调用了函数!),你可以引用底层的函数对象.您可以重新绑定它们,检查它们或在列表中存储对它们的引用.

mylist = [test_func_1,test_func_2,..]

此时,没有执行任何功能.然后,您可以使用random.choice从列表中选择一个函数并使用()以下命令调用它:

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