python - 在 Python 中,如何使用列表中的字符串来调用同名函数?

标签 python

我无法在任何地方找到满意的答案,所以我决定询问。

假设我们有一个全局计数器和一个全局列表

counter=0
list=["function1","function2",..."functionN"]

我们还定义了这些函数:

def function1():
  pass
def function2():
  pass
.
.
.
def functionN():
  pass


我有一个带有按钮的界面,每次按下它时,全局计数器都会递增。根据号码,我需要调用不同的函数。我可以用 if 和 elif 来实现这个,但我不认为它那么聪明。 有没有办法可以使用列表调用这些函数?

示例

当 counter=0=>list[0]=>字符串为 'function1'=> 调用 function1()

再次按下按钮

counter=1=>list[1]=>字符串是 'function2' => 调用 function2()

最佳答案

您可以通过函数名称调用函数,如下所示:

locals()["myfunction"]()

或者:

globals()["myfunction"]()

或者如果它来自另一个模块,如下所示:

import foo
getattr(foo, 'myfunction')()

或者,如果它适合您的用例,只需使用函数列表而不是字符串列表:

def func1():
    print("1")

def func2():
    print("2")

def func3():
    print("3")

def func4():
    print("4")

some_list=[func1, func2, func3, func4]

# call like this
for f in some_list:
    f()

# or like this
some_list[0]()

关于python - 在 Python 中,如何使用列表中的字符串来调用同名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60458257/

相关文章:

python - 使用 2 个索引列表对 2D Numpy 数组进行索引

python - 为什么 NumPy 在对零填充数组求和时给出不同的结果?

python - Mypy 提示默认参数值与省略号不兼容

python - 在其他函数中重新定义python函数

python - Django 信号与重写保存方法

python - 在django中测量图像的高度和宽度并将值存储在模型中

python - 我尝试求解非线性方程时出错

python - 子菜单项不调用函数 [有工作解决方案]

python - 为什么我的神经网络显示奇怪的结果?

python - 将 numpy.ndarray 转换为字符串