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

如何通过字典调用函数?如何参照该格式用列表调用非模块函数?

实现方案说明

Python原生语法不支持直接使用[function_name](parameters)的格式调用函数,方括号[]在Python中默认用于定义列表、执行索引/切片操作,直接写上述格式会抛出TypeError: 'list' object is not callable报错。
你可以通过以下两种合法方案实现“通过列表调用普通函数”的需求:

方案1:原生列表存函数对象调用(最推荐)

函数在Python中是一等公民,可以直接作为元素存入列表,通过索引取出函数对象后直接传参调用即可:

# 先定义普通函数
def greet(name):
    return f"Hello {name}!"

def calc_sum(a, b):
    return a + b

# 将函数存入列表
func_list = [greet, calc_sum]

# 调用方式:列表[索引](参数)
print(func_list[0]("Bob")) # 输出 Hello Bob!
print(func_list[1](3, 5)) # 输出 8

如果需要通过函数名字符串而非索引调用,可以改用字典存储(也就是你之前用到的模块调用逻辑的原生版本):

func_map = {
    "greet": greet,
    "calc_sum": calc_sum
}
print(func_map["greet"]("Alice"))

方案2:模拟预期字面格式(仅做演示,不推荐生产环境使用)

如果一定要实现和你预期写法高度相似的格式,可以通过字符串解析+eval实现,但该方法存在注入安全风险,仅可用于个人测试场景:

def func1():
    return "func1 executed"

def func2(content):
    return f"func2 get: {content}"

# 模拟[function_name](parameters)调用逻辑
def call_func(expr):
    func_name = expr.split('[')[1].split(']')[0]
    params = expr.split('(')[1].rstrip(')')
    return eval(f"{func_name}({params})")

# 调用示例
print(call_func("[func1]()")) # 输出 func1 executed
print(call_func("[func2]('test')")) # 输出 func2 get: test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:06:02