gpt4 book ai didi

javascript - 将 compose 函数从 javascript 翻译为 python,函数式方式

转载 作者:行者123 更新时间:2023-12-01 02:25:30 25 4
gpt4 key购买 nike

我正在尝试将我的 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/

25 4 0
文章推荐: ember.js - Ember : Testing with Pavlov/QUnit produces TypeError: Object # has no method 'getHandler'