zoukankan      html  css  js  c++  java
  • Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

    一、map/reduce

    • map

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

    • reduce

    reduce结果 继续 和序列 的 下一个元素 做 累积计算

    str ===> int

    • filter()

    Python内建的 filter()函数用于过滤序列。

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

     筛选素数

     

    def _not_divisible(n):
        return lambda x: x % n > 0

    这是一个筛选函数:_not_divisible函数返回一个【参数为 x ,  功能是 判断 x % n 是否 大于 0 】函数

     

    •  sorted

    二、返回函数

     当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数:

      ( f1()f2()的调用结果互不影响。)

    (廖雪峰博客:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431835236741e42daf5af6514f1a8917b8aaadff31bf000)

    三、匿名函数

     

    四、偏函数

     functools.partial:创建一个偏函数的,可以直接使用下面的代码创建一个新的函数int2

     

    functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数

     

    五、装饰器(Decorator)

    在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

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

     

    由于log()是一个decorator,返回一个函数,所以,原来的now()函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now()将执行新函数,即在log()函数中返回的wrapper()函数。

     wrapper()函数的 参数定义是(*args, **kw),因此,wrapper()函数可接受任意参数的调用。在wrapper()函数内,首先打印日志,再紧接着调用原始函数

    如果 decorator本身需要传入参数,那就需要编写一个返回decorator的高阶函数。

     

      (__name__已经从原来的'now'变成了'wrapper')

    因为返回的那个wrapper()函数名字就是'wrapper',所以,需要把原始函数的__name__等属性复制到wrapper()函数中,否则,有些依赖函数签名的代码执行会出错。

    所以,最终写法如下:

     

    decorator本身需要传入参数

    笔记摘抄自廖雪峰博客:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000

  • 相关阅读:
    ****** 2019-2020-1 《数据结构与面向对象程序设计》第1周学习总结
    预备作业
    《数据结构与面向对象程序设计》第01周学习总结
    我太难了——00周作业
    作业二
    预备作业 作业一
    FIR滤波器设计
    第五章:相关分析
    通常来说分频电路用计数器来实现,奇数倍的话记得用上或门!
    HDLBits 刷题记录(5)
  • 原文地址:https://www.cnblogs.com/douzujun/p/10230820.html
Copyright © 2011-2022 走看看