首页 > 解决方案 > 从函数列表创建一个新函数

问题描述

考虑几个简单的函数:

add2 = lambda x: x+2
add3 = lambda x: x+3
add4 = lambda x: x+4

并将它们存储在列表中:

funcs = [add2, add3, add4]

有没有办法,如何创建一个应用所有给定函数的新函数?


不工作的解决方案:

f = funcs[0]
for g in funcs[1:]:
    f = lambda x: g(f(x))

这不起作用,因为在尝试调用 create 函数后f(0),我得到了RecursionError: maximum recursion depth exceeded,我不完全理解。


问题的解决方案优雅地应用 Python 函数列表不适用于我的问题。

我不想得到结果(还),我想构造一个新函数

from functools import reduce

result = reduce(lambda res, f: f(res), funcs, val)

但是,它应该与部分的组合一起使用。

标签: python

解决方案


工作解决方案functools

import functools
f = functools.partial(functools.reduce, lambda res, f: f(res), funcs)

工作解决方案(没有 lambdas):

def _inner(x): 
     for f in funcs: 
         x = f(x) 
     return x 

调用_inner(0)正确返回9


推荐阅读