Python--高阶函数及其装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python--高阶函数及其装饰器相关的知识,希望对你有一定的参考价值。

高阶函数

函数式编程

? 函数可以认为是变量, 因此函数名可以作为参数传入函数;这样的函数称为高阶函数;

 技术分享图片

内置高阶函数

?  map

map(function, sequence[, sequence, ...]) -> list

对sequence序列中的每一个元素item依次执行function(item)函数 操作,最终返回一个

?  列表;

reduce

reduce(function, sequence[, initial]) -> value

对于序列中的每个元素迭代调用function函数;

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) =====》  (((1+2)+3)+4)+5).

注意的点: function必须要有两个参数;

?  filter函数

filter(function or None, sequence) -> list, tuple, or string

注意: function函数返回值为bool类型

?  sorted函数

sorted(iterable, cmp=None, key=None, reverse=False) -->  new sorted list

cmp=用于比较的函数, 返回值一定和cmp函数的返回值对应(1,-1,0);

 

# map/reduce

 技术分享图片

# li.sort() 作用于列表本身 ; 只能用于列表排序 ;

 技术分享图片

# sorted 返回一个新的对象 , 可以对任意可迭代的对象进行排序 ;

 技术分享图片

# sorted 逆序排序

 技术分享图片

函数作为形参传入函数

函数作为返回值

def fun(a, b): return xx

 技术分享图片

闭包(closure)

 技术分享图片

 

装饰器

- 器,可以理解为函数;

- 装饰器实质上是用来装饰函数的;

- 装饰器就是在原来功能基础上加上一些其他功能,即在程序执行前或者执行后- 加上需要的操作;

- 装饰器的功能,比如:权限的验证,日志记录, 函数运行时间统计, 执行函数前              

 

  预备处理, 执行函数后清理功能等;

- 产品经理, 开发人员之间的爱恨情仇

 技术分享图片

 技术分享图片

 

 

? 理解装饰器的实质(建议在pycharm中debug调试,查看运行过程)

 技术分享图片

? 装饰器应用之函数计时器

 技术分享图片

 技术分享图片

被装饰的函数有参数

案例参照上述代码

? 必选参数

? 默认参数

? 可变参数(注意: 尽量使用,通用性比较强)

? 关键字参数

 

装饰器带参数

 技术分享图片

 技术分享图片

 

装饰器案例之引入日志

? 添加装饰器@myLogger的函数都会记录日志

? 日志格式为 什么时间 start 什么函数 函数参数

? 文件操作学习后的升级: 把日志信息记录到文件/var/log/myfun.log中;

 技术分享图片

 技术分享图片

 

练习

- 编写Logger装饰器,实现被装饰的函数运行结束后,打印日志的信息;

- 日志格式内容为:时间、函数名、运行时间;

- 被装饰的函数可以接收任意个参数;

- 装饰器可以传参数,并将装饰器传的参数打印出来

- 装饰器显示为:“装饰器所传参数为:xxx”

 技术分享图片

技术分享图片


以上是关于Python--高阶函数及其装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 高阶函数与装饰器

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

四.Python高阶函数和装饰器

Python高阶函数之 - 装饰器

Python基础高阶函数+函数嵌套+闭包 ==装饰器

python学习笔记之函数总结--高阶函数以及装饰器