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

标签 javascript python functional-programming

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

相关文章:

javascript - 在显示大部分使用组件时设置 React 基本背景颜色

javascript - 图片库未将图片放入 div

python - 根据长度将数据帧拆分为相对均匀的 block

python - os.path.join 产生额外的正斜杠

haskell - 是否可以在 Haskell 中使用 if 函数使用模式匹配?

c++ - Haskell 中的面向对象编程

javascript - 如何用html2canvas抓取div?

javascript - JavaScript 中的日期减法

python - 将 dict 保存为 JSON 以便它们是人类可读的

c# - 使用 LanguageExt 时使用替代/默认返回来处理 "failure"?