You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何调用名称仅存于变量中的函数?附动态模块场景

如何在Python中通过变量调用函数(含动态模块场景)

刚好碰到过类似的场景,我来一步步帮你解决这个问题~

核心问题:通过字符串变量调用函数

在Python里,要调用名字存在变量里的函数,主要有几种常用方法,其中**getattr()**是处理动态模块场景最方便的:

1. 针对单个模块/对象的情况

你的示例代码里目前只是返回了函数名字符串,并没有真正调用函数。假设dynamic_module_anmount是你加载的动态模块(或者一个包含函数的对象),我们可以用getattr()来获取函数对象,然后执行它:

def do_function(function_name: str):
    # 先检查模块里是否存在这个函数
    if hasattr(dynamic_module_anmount, function_name):
        # 获取函数对象
        target_func = getattr(dynamic_module_anmount, function_name)
        # 调用函数,如果需要传参的话,这里可以加参数,比如target_func(arg1, arg2)
        return target_func()
    else:
        # 处理函数不存在的情况,比如抛异常或者返回默认值
        raise ValueError(f"找不到名为 {function_name} 的函数")

这里用hasattr()先做检查是为了避免函数不存在时抛出AttributeError,如果你想简化,也可以直接用getattr()的默认参数:

def do_function(function_name: str):
    target_func = getattr(dynamic_module_anmount, function_name, None)
    if target_func:
        return target_func()
    raise ValueError(f"找不到名为 {function_name} 的函数")

2. 针对多动态模块的场景

如果你的接口扫描目录加载了多个模块,每个模块里都可能有目标函数,那可以遍历所有加载的模块来查找:

# 假设modules是你扫描目录后加载的所有模块的列表
def do_function(function_name: str):
    for module in modules:
        if hasattr(module, function_name):
            target_func = getattr(module, function_name)
            return target_func()
    raise ValueError(f"所有模块中都找不到名为 {function_name} 的函数")

3. 当前作用域内的函数调用(补充场景)

如果函数就在当前脚本的全局/局部作用域里,也可以用globals()或locals()字典来获取函数:

def hello():
    return "Hello!"

func_name = "hello"
# 全局作用域调用
print(globals()[func_name]())  # 输出 Hello!

额外提醒:函数参数的传递

如果你的目标函数需要接收参数,可以在do_function里预留参数位置,把参数传递过去:

def do_function(function_name: str, *args, **kwargs):
    if hasattr(dynamic_module_anmount, function_name):
        target_func = getattr(dynamic_module_anmount, function_name)
        # 传递任意位置参数和关键字参数
        return target_func(*args, **kwargs)
    raise ValueError(f"找不到名为 {function_name} 的函数")

# 调用示例:假设目标函数需要两个参数
do_function("add_numbers", 10, 20)

内容的提问来源于stack exchange,提问作者user14262139

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:00:39