首页 > 解决方案 > 使用动态字符串变量调用 Python 函数

问题描述

我正在尝试创建一个动态方法执行器,其中我有一个始终包含两个元素的列表。第一个元素是文件名,第二个元素是要执行的方法的名称。

我怎样才能做到这一点?

不幸的是,我下面的代码不起作用,但它可以很好地说明我想要实现的目标。

from logic.intents import CenterCapacity

def method_executor(event):
    call_reference = ['CenterCapacity', 'get_capacity']

    # process method call
    return call_reference[0].call_reference[1]

谢谢!

标签: pythonpython-3.xstringfunction

解决方案


注意:这个答案假设必要的导入已经发生,你只需要一种机制来调用导入模块的功能。如果你还希望通过一些程序代码来完成导入,我将不得不添加那部分, 使用importlib库)

你可以这样做:

globals()[call_reference[0]].__dict__[call_reference[1]]()

解释:

globals()返回全局变量名称与其引用对象之间的映射。导入模块的名称算作当前模块的这些全局变量之一。

索引这个映射对象call_reference[0]返回包含要调用的函数的模块对象。

模块对象将模块的__dict__每个属性名称映射到该属性引用的对象。模块中定义的函数也算作模块的属性。

__dict__因此,使用函数名进行索引会call_reference[1]返回函数对象。


推荐阅读