我正在尝试将我的 Javascript 撰写函数转换为 Python,但我在最后一个函数上遇到了问题。如何概括未知数量的函数?
阅读后this ,我想避免使用 reduce()
方法。
JavaScript:
/* compose functions */
const comp1 = (fn2, fn1) => arr => fn2(fn1(arr)) // 2 functions, one array
const comp2 = (fn2, fn1) => (...arrs) => fn2(fn1(...arrs)) // 2 functions, multiple arrays
const comp3 = (...fns) => (...arrs) => fns.reduceRight((v,f) => f(v), arrs) // multiple functions, multiple arrays
python :
/* compose functions */
comp1 = lambda fn2,fn1: lambda arr: fn2(fn1(arr)) # 2 functions, 1 array
comp2 = lambda fn2,fn1: lambda *arrs: fn2(fn1(*arrs)) # 2 functions, multiple arrays
comp3 = lambda *fns: lambda *arrs: ????
所有改进都值得赞赏...
最佳答案
如果你真的不想使用reduce
(我相信这是正确的方法),你可以有一个循环。尽管如此,这会阻止您使用 lambda
。
def compose(*fns):
def composed(*args, **kwargs):
output = fns[-1](*args, **kwargs)
for fn in reversed(fns[:-1]):
output = fn(output)
return output
return composed
我想再次声明,没有理由不使用reduce
,因为上面只是reduce的一个具体实现。组合是一种减少。
from functools import reduce # Only required in Python3 where reduce was moved
def compose(f1, f2):
return lambda *args, **kwargs: f1(f2(*args, **kwargs))
def compose_many(*fns):
return reduce(compose, fns, lambda x: x)
关于javascript - 将 compose 函数从 javascript 翻译为 python,函数式方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845017/