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

Python中如何将字符串列表转换为可调用函数列表

字符串函数名转可调用函数的实现方法

最安全也最可控的是手动建立映射字典,避免执行不可信的外部代码,非常适合你从外部邮件爬取内容的场景:

方案1:手动建立函数映射字典(推荐)

# 先定义你需要用到的对应函数
def SU():
    # SU对应的业务逻辑
    return "SU函数执行结果"

def BT():
    # BT对应的业务逻辑
    return "BT函数执行结果"

def PL():
    # PL对应的业务逻辑
    return "PL函数执行结果"

# 建立字符串名到函数实体的映射关系
func_mapping = {
    "SU": SU,
    "BT": BT,
    "PL": PL
}

匹配到字符串后直接从字典中取出可调用的函数实体即可:

a = ['SU', 'BT', 'PL']
s = 'sdf sghf sdfgdf SU agffg PL asu'
matches = [x for x in a if x in s]
# 转换为可调用函数列表
callable_funcs = [func_mapping[item] for item in matches]

# 直接调用测试
for func in callable_funcs:
    print(func())

方案2:从全局命名空间获取

如果不想手动维护映射字典,也可以直接从当前全局命名空间中拉取对应名称的函数,注意该方案安全性低于方案1,需确保匹配到的字符串都是合法的函数名:

callable_funcs = [globals()[item] for item in matches]

方案3:类内方法场景用getattr

如果你的函数是某个类的成员方法,使用getattr获取即可:

class ToolFunc:
    def SU(self):
        return "类方法SU执行"
    def BT(self):
        return "类方法BT执行"
    def PL(self):
        return "类方法PL执行"

tool = ToolFunc()
callable_funcs = [getattr(tool, item) for item in matches]

注意事项

  • 禁止使用eval()实现该需求,你爬取的内容来自外部邮件,属于不可信输入,eval()会直接执行传入的任意代码,存在极大安全风险
  • 你示例中返回的['SU', 'BL']存在逻辑问题,BL并不在你的初始函数名列表a中,实际运行原代码不会匹配到BL,大概率是拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:45:06