Python实现链式执行多函数的chain函数问题求解
现有代码问题
你的实现存在两个核心错误:
chain函数没有返回新的可调用对象,而是直接执行传入的函数,无法满足先传入函数生成组合函数、后续再传入实际参数执行的需求- 循环执行函数时没有保存上一步的执行结果,也没有将结果作为下一个函数的输入,且没有返回最终执行结果
正确实现
def chain(*funcs): # 定义要返回的新函数,接收初始执行参数 def execute(initial): result = initial for func in funcs: result = func(result) return result return execute
效果验证
使用你给出的示例测试:
my_func = chain(lambda x: x + 2, lambda x: (x/4, x//4)) print(my_func(37))
输出和预期完全一致:
(9.75, 9)
可选扩展
如果需要支持第一个函数接收多个初始参数,可以调整实现如下:
def chain(*funcs): def execute(*args, **kwargs): # 第一个函数直接接收所有传入的参数 result = funcs[0](*args, **kwargs) for func in funcs[1:]: result = func(result) return result return execute
该版本支持如下调用:chain(lambda a,b: a+b, lambda x:x*3)(2,5),执行结果为21。
内容的提问来源于stack exchange,提问作者Keyreall
相关产品推荐
相关产品推荐

