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

Python中如何通过字符串变量调用同名函数?

嘿,这个问题我之前在项目里也遇到过!要通过机器提供的字符串变量调用同名函数,直接用字符串肯定会报错,因为字符串本身不是可调用对象。这里有几个实用的解决办法,你可以根据场景选:

方法1:利用全局命名空间globals()

如果你的函数是定义在全局作用域里的,可以通过globals()字典来获取函数对象——它会返回当前全局作用域的所有变量和函数,键是名称字符串,值是对应的对象:

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

# 机器提供的字符串变量
func_name = "add"

# 获取函数并调用
if func_name in globals():
    target_func = globals()[func_name]
    num = target_func(3, 5)
    print(num)  # 输出: 8
else:
    print(f"找不到名为{func_name}的函数")

注意一定要加存在性检查,不然如果字符串对应的函数不存在,会直接抛出KeyError。

方法2:用字典映射函数(更推荐)

如果你的可调用函数是固定的几个,强烈推荐用字典来做映射——这种方式更安全,能明确控制哪些函数可以被调用,避免误操作全局命名空间里的其他对象:

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y

# 建立函数映射表,键是字符串,值是对应的函数对象
func_mapping = {
    "add": add,
    "subtract": subtract,
    "multiply": multiply
}

func_name = "subtract"

if func_name in func_mapping:
    num = func_mapping[func_name](10, 4)
    print(num)  # 输出: 6
else:
    print("无效的函数名称")

这种方式也很灵活,甚至可以直接在字典里定义匿名函数,比如加个除法:"divide": lambda x,y: x/y。

方法3:如果函数是类的方法,用getattr()

如果你的函数是某个类的实例方法,可以用getattr()来获取方法对象:

class Calculator:
    def add(self, x, y):
        return x + y
    def subtract(self, x, y):
        return x - y

calc = Calculator()
func_name = "add"

# 获取实例方法,第三个参数是默认值,避免找不到时报错
target_method = getattr(calc, func_name, None)
if target_method:
    num = target_method(2, 3)
    print(num)  # 输出: 5
else:
    print(f"{func_name}方法不存在")

总结

  • 全局函数可以用globals(),但记得做存在性检查;
  • 固定函数集合优先用字典映射,安全又可控;
  • 类方法用getattr()更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:54:56