学习笔记-Python基础13-高级特性-函数式编程:lambda表达式(匿名函数)、高阶函数、返回函数、装饰器、偏函数

函数式编程(FunctionalProgramming)

  基于lambda演算的一种编程方式

    程序中只有函数

    函数可以作为参数,同样可以作为返回值

    纯函数式编程语言:LISP,Haskell

  Python函数式编程只是借鉴函数式编程的一些特点,可以理解成一半函数式一半Python

  内容:

    高阶函数

    返回函数

    匿名函数

    装饰器

    偏函数

  lambda表达式

    函数:最大程度复用代码

      存在问题:如果函数很短,则会造成繁琐

      如果函数被调用次数少,则会造成浪费

      对阅读者来说,造成阅读流程的被迫中断

    lambda表达式(其他语言也叫匿名函数)

      一个表达式,函数体相对简单,不是一个代码块,仅仅是一个表达式,所以没有return

      参数可选,有无均可,也可有多个,参数用逗号隔开

      参数用:冒号和之后的表达式主体隔开

      举例如下:

      

  高阶函数

    把函数作为参数使用的函数,叫高阶函数

    函数名称可以看做一个变量,变量可以当做参数,传入函数,所以函数名称也可以当做参数传入函数,举例如下:

    

    系统定义的高阶函数:

       map,原意是映射,即把集合或者列表里的的每一个元素,都按照一定规则进行操作,生产一个新的列表或者集合,返回的值是一个可迭代对象

        

      reduce,原意是归并、缩减,把一个可迭代对象最后归并成一个结果,对于作为参数的函数有要求:必须有两个参数,必须有返回结果

        使用reduce需要先导入functools包

        reduce操作过程:reduce([1, 2, 3, 4, 5]) == f(f(f(f(1, 2), 3), 4), 5)

        

      filter,过滤函数,对一组数据进行过滤,符合条件的数据会生成一个新的列表并返回

        filter跟map比较:

          相同:都对列表的每个元素逐一进行操作

          不同:

             map会生成一个跟原数据相对应的新队列

                filter不一定,只有符合条件的才会进入新的数据集合

        filter函数写法:

          利用给定函数进行判断

          返回值一定是布尔值

          调用格式:filter(f,data),f是过滤函数,data是数据

        

    高阶函数-排序:

      把一个序列按照给定算法进行排序

      key:在排序前针对每一个元素进行key函数运算,可以理解成按照key函数定义的逻辑进行排序

      Python2和Python3相差甚大

      

  返回函数:

    函数可以返回具体的值,也可以返回一个函数作为一个结果

    

     

    闭包closure

      当一个函数在自己内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,同时内部函数被当做返回值的时候,相关参数和变量保存在返回的函数中,这种结果叫做闭包,比如上面的myF4函数

      

  装饰器decorator

    在不改动函数代码的基础上无限扩展函数功能的一种机制,本质上讲,装饰器是一个返回函数的高阶函数

    装饰器的使用:使用@语法,即在每次要扩展到函数定义前使用@+函数名

    

    

  偏函数:

    参数固定的函数,相当于一个有特定参数的函数体

       首先引入functools.partial,作用是把一个函数某些参数固定,返回一个新函数

    

原文地址:https://www.cnblogs.com/Cloudloong/p/9732393.html