【发布时间】:2022-01-10 13:40:42
【问题描述】:
在 python 中,reduce 接受一个只接受两个参数的函数。
有没有什么优雅的方法可以让reduce 接受两个以上的参数?
例如:
from operator import add
list = [1,add,2,add,3,add,4]
func = lambda operand1,operator,operand2: operator(operand1,operand2)
reduce(func,list) # mock reduce. Expected result is 10(1+2+3+4=10)
编辑:
reduce3函数用于计算抽象语法树(AST)的结果。
AST 的每个孩子都可以是一个节点或另一棵树。
为简单起见,假设叶子节点只能是数字,加法符号(+)或减法符号(-)。计算结果,一个直观的想法是首先计算出每个节点的结果(可以实现通过递归调用方法),然后将它们组合在一起。
例如,这是一个简单的 AST:
Tree(
Node(1),
Node("+"),
Tree(
Node(2),
"+",
Node(3)
),
Node("-"),
Node(4)
)
递归后得到如下结果。
如果有一个reduce 取3 个参数,我们可以很容易地组合结果。
Tree(
Node(1),
Node("+"),
Node(5)
Node("-"),
Node(4)
)
【问题讨论】:
-
它很特别,你可能找不到一个功能。
-
没有。当然,您可以构建一个,但它不再与
reduce相关。请注意,如果reduce/add是柯里化形式,您可以改写[add(1), add(2), add(3)],这与reduce再次兼容。
标签: python functional-programming