Python项目中如何创建声明时不自动执行的函数列表?
问题
我正在开发一个Python项目,需要从列表中随机选择一个函数执行,但声明函数列表时,函数会自动执行。请问有没有办法创建一个不会自动执行的函数列表?
示例代码:
import random def a(): global var var = 1 def b(): global var var = 2 list = [a(), b()] print(var)
运行结果:
>>> 2
解决方案
问题的核心是你在列表中写了a()和b()——带括号的写法会立即执行函数,并把函数的返回值(这里是None,因为函数没有return语句)存入列表。
要创建只存函数本身、不会自动执行的列表,只需去掉括号,把函数对象直接放进列表:
import random def a(): global var var = 1 def b(): global var var = 2 # 存函数对象,不要加括号 func_list = [a, b] # 随机选择函数并执行 chosen_func = random.choice(func_list) chosen_func() # 这里才主动调用函数 print(var)
这样修改后,列表里保存的是函数的引用,只有当你显式调用chosen_func()时,对应的函数才会运行,var的值会随机变成1或2。
另外建议不要用list作为变量名,这是Python的内置类名,会覆盖系统自带的list功能,改用func_list这类更清晰的名称更稳妥。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

