Python的学习笔记--函数式编程

付威     2019-03-10   1115   3min  

函数式编程 主要思想是把运算过程尽量写成一系列嵌套的函数调用,不严谨的说:可以把函数的引用传递给变量。例如:

>>> abs(-10)
10
>>> f=abs
>>> f(-10)
10

f就引用了abs函数的地址。

  1. 可以把函数当成参数传递给另一个函数:

      def add(x,y,f):
      return f(x)+f(y)
      print(add(-1,2,abs))
    
  2. 函数也可以当成返回值:

      def getMethod():
      return abs
      print(getMethod()(-1))
    

    打印结果是:1

  3. python也支持lambda表达式

      f=lambda x:x+x
      print(f(10))
    

    打印结果是:10

  4. 可以固定一个函数的默认值,返回一个新函数

      import functools
      def add(x="2"):
      print(x)
      add()
      add1=functools.partial(add, x="5")
      add1()
    

    打印结果:2 5

    我们使用functools.partial方法把add的默认值修改成一个新的函数add1

常用的几个函数

  • map和reduce使用

    map函数的格式可以大致的表示为:map(func,[]),其功能就是把数组的每一个元素代入到func函数中,具体的实现功能如下:

    list(map(abs,[-1,3,4,-6])),打印结果是:[1,3,4,5]

    我们可以根据其定义编写对应的功能:

       def map1(func,arr):
            l=[]
            for x in arr:
                 yield func(x)
    
       print(map1(abs,[1,-3,-4,6]))
    

    reduce是一个累计的函数,把上次计算的结果,当成下次运行的一个参数:s1=f(x,y);s2=f(s1,z);

       def add(x,y):
       return x+y
       print(reduce(add,[1,-3,-4,6]))
    

    计算结果:1-3-4+6=0

    用python代码来表示reduce

       def reduce1(func,arr):
            s=0
            for x in arr:
                 s=func(s,x)
            return  s; 
    
    
(本文完)

作者:付威

博客地址:http://blog.laofu.online

如果觉得对您有帮助,可以下方的RSS订阅,谢谢合作

如有任何知识产权、版权问题或理论错误,还请指正。

本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证

交流请加群113249828: 点击加群   或发我邮件 laofu_online@163.com

付威

获得最新的博主文章,请关注上方公众号