Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

时间:2023-08-12 22:54:56

一、map/reduce

  • map

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

  • reduce

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

str ===> int

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

  • filter()

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

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

筛选素数

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

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

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

  • sorted

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

二、返回函数

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器 ( f1()f2()的调用结果互不影响。)

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

三、匿名函数

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

四、偏函数

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

五、装饰器(Decorator)

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

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

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

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

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器 (__name__已经从原来的'now'变成了'wrapper')

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

所以,最终写法如下:

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

decorator本身需要传入参数

Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

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