美文网首页
python中的函数式编程函数compose

python中的函数式编程函数compose

作者: gmsy | 来源:发表于2017-03-04 16:48 被阅读0次

python中的函数式编程函数compose

我不认为自己是函数式编程方面的专家,但是大量使用Haskell,Lisp和Scheme语言彻底使我的编程方式是函数式的.所以当看到web上许多对compose函数罗嗦而又复杂的实现方法后,我决定写篇文章介绍个简单却功能强大的通用实现方式.</br>

组合两个函数

把函数组合起来就是说每个函数的返回值是下一个函数的参数.例如把f和g组合起来就是f(g(x)).x是g的参数,执行的结果作为f的参数再执行,最后的结果就是组合函数的结果.</br>
我们现在定义一个函数 composer2 ,它接受两个函数(fg)作为参数,然后返回一个组合后的函数:</br>

def composer2(f,g):
  return lambda x:f(g(x))

例如:

>>> def double(x):
...     return x * 2
...
>>> def inc(x):
...     return x + 1
...
>>> inc_and_double = compose2(double, inc)
>>> inc_and_double(10)
22

组合n个函数

现在我们知道怎么组合两个函数了,那推广到组合n个函数一定蛮有趣.既然我们有了composer2这个函数,让我们试着在composer2基础上组合3个函数.

>>> def dec(x):
...     return x - 1
...
>>> inc_double_and_dec = compose2(compose2(dec, double), inc)
>>> inc_double_and_dec(10)
21

看到这里的模式没?首先我们组合两个函数,成为一个新函数,然后我们组合这个新函数和下一个函数,以此类推......</br>
让我们用python写出来.</br>

import functools

def compose(*functions):
    def compose2(f, g):
        return lambda x: f(g(x))
    return functools.reduce(compose2, functions, lambda x: x)

或者你喜欢更紧凑的方式:
</br>

def compose(*functions):
    return functools.reduce(lambda f, g: lambda x: f(g(x)), functions, lambda x: x)

例子:</br>

>>> inc_double_and_dec = compose(dec, double, inc)
>>> inc_double_and_dec(10)
21

多参数的函数

支持多参数有点费事,不过完全不必要这么做.因为任何函数都能转化为只接受一个参数.高阶函数中的奇技淫巧比如柯里化,装饰器,或者我们自己写.</br>
例如:

>>> def second(*args):
...     return args[1]
...
>>> def second_wrapper(lst):
...     return second(*lst)
...
>>> pipeline = compose(second_wrapper, list, range)
>>> pipeline(5)
1
>>> def sub(a, b):
...     return a - b
...
>>> pipeline = compose(functools.partial(sub, b=4), operator.neg)
>>> pipeline(-6)
2

如果你想学习python中的函数式编程,我建议这个文档
翻译自:Mathieu Larose

相关文章

  • python中的函数式编程函数compose

    python中的函数式编程函数compose 我不认为自己是函数式编程方面的专家,但是大量使用Haskell,Li...

  • compose函数

    compose compose 是函数式编程中一个非常重要的函数,compose的函数作用就是组合函数的,将函数串...

  • Javascript进阶——函数式编程(2)

    函数式编程中,常用的函数及使用: 组合函数 (Compose,Pipe) 概念 将需要嵌套执行的函数平铺,嵌套执行...

  • compose

    compose是函数式编程中使用较多的一种写法, 它把逻辑解耦在各个函数中,通过compose的方式组合函数, 将...

  • 高阶python 函数式编程

    高阶python 函数式编程 - 函数式 函数式编程(FunctionalProgramming) - 基于lam...

  • 【第十五天】函数式与并行运算

    第七章 函数式编程 7.1 1.Python中的函数式 函数式编程强调了函数的纯粹性(purity)一个纯函数是没...

  • koa-compose源码阅读

    众所周知,在函数式编程中,compose是将多个函数合并成一个函数(形如: g() + h() => g(h())...

  • Python 中的函数式编程 - PyTips 0x02

    项目地址:https://git.io/pytips Python 中的函数式编程 函数式编程(英语:functi...

  • Python高阶函数

    本篇将介绍Python的函数式编程,介绍高阶函数的原理,更多内容请参考:Python学习指南 函数式编程 函数是P...

  • Python函数式编程指南

    注:采转归档,自己学习查询使用 Python函数式编程指南(1):概述Python函数式编程指南(2):函数Pyt...

网友评论

      本文标题:python中的函数式编程函数compose

      本文链接:https://www.haomeiwen.com/subject/eirjgttx.html