如何通过字典调用函数?如何参照该格式用列表调用非模块函数?
实现方案说明
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_
相关产品推荐
相关产品推荐

