python - 从函数列表创建一个新函数
问题描述
考虑几个简单的函数:
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)
但是,它应该与部分的组合一起使用。
解决方案
工作解决方案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
。
推荐阅读
- python - 从python中的模块导入类
- azure - 从 Visual Studio 发布到 Azure 虚拟机
- python - 在不关闭 GUI 窗口的情况下停止线程
- laravel - 有一种方法可以自动将模型注入 laravel 中的控制器,而无需使用 Illuminate\Http\Request?
- python-3.x - 如何将按钮输入为整数
- swift - 复杂的自定义导航 SwiftUI
- android - 如何使用 Retrofit2 和 GSON 从响应中获取特定的 JSON 数组?
- node.js - 使用node js读取和操作一个TS文件
- cordova - SVG模糊过滤器在iOS wkwebview上不起作用
- javascript - 将参数传递给部分类和超级类中的构造函数,javascript