zoukankan      html  css  js  c++  java
  • 学习笔记-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,作用是把一个函数某些参数固定,返回一个新函数

        

  • 相关阅读:
    Struts2拦截器的底层实现(AOP思想)
    JFreeChart的使用
    struts2与servlet的耦合
    谷歌地图:使用多边形自动形成类PolygonCreator
    struts2 中的 addActionError 、addFieldError、addActionMessage方法的区别
    Struts2的声明式异常处理
    Java synchronized 详解
    [转载]C# 编写SQL SERVER 2005 的存储过程
    调试基于clr管理的sqlserver存储过程
    sqlserver中调用.net中的dll
  • 原文地址:https://www.cnblogs.com/Cloudloong/p/9732393.html
Copyright © 2011-2022 走看看