Python基础学习:高阶函数

  1. map
    map() 函数接收两个参数,一个是函数,一个是 Iterable,map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 Iterator 返回。


    image.png
  2. reduce
    reduce 把一个函数作用在一个序列 [x1, x2, x3,...] 上,这个函数必须接收两个参数, reduce 把结果继续和序列的下一个元素做累积计算。


    image.png

    字符串转换成整数:


    image.png
  3. filter
    filter()函数用于过滤序列。filter() 也接收一个函数和一个序列。和 map() 不同的是 filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素。


    image.png
  4. sorted
    Python内置的sorted()函数可以对list进行排序,还可以接收一个key函数来实现自定义的排序,key指定的函数将作用于list的每个元素上,并根据key函数返回的结果进行排序:


    image.png
  5. 闭包


    image.png

    调用lazy_sum()时,返回的并不是求和结果,而是求和函数:


    image.png

    调用函数f时,才真正计算求和结果:
    image.png

    在函数 lazy_sum 中又定义了函数 sum ,并且,内部函数 sum 可以引用外部函数 lazy_sum 的参数和局部变量,当 lazy_sum 返回函数 sum 时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”。

  6. 匿名函数:lambda
    匿名函数有个限制,就是只能有一个表达式,不用写 return ,返回值就是该表达式的结果。


    image.png
  7. 装饰器
    在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。装饰器接受一个函数作为参数,并返回一个函数。定义时需要借助Python的@语法:


    image.png

    把@log放到now()函数的定义处,相当于执行了语句:


    image.png

    由于 log() 是一个decorator,返回一个函数,所以,原来的 now() 函数仍然存在,只是现在同名的 now 变量指向了新的函数,于是调用 now() 将执行新函数,即在 log() 函数中返回的 wrapper() 函数。wrapper() 函数的参数定义是 (*args, **kw) ,因此, wrapper() 函数可以接受任意参数的调用。在 wrapper() 函数内,首先打印日志,再紧接着调用原始函数。
    一个完整的decorator的写法如下:
    image.png

    或者针对带参数的decorator:


    image.png
  8. 偏函数
    functools.partial 的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。


    image.png

你可能感兴趣的:(Python基础学习:高阶函数)