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--高阶函数及其装饰器的主要内容,如果未能解决你的问题,请参考以下文章