python- - 高级特性(装饰器、内置高阶函数)
装饰器
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的
前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,
比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。
为什么需要装饰器?
写代码要遵循 开放封闭 原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:
1.封闭:已实现的功能代码块
2.开放:对扩展开发
装饰器(decorator)功能
- 引入日志
- 函数执行时间统计
- 执行函数前预备处理
- 执行函数后清理功能
- 权限校验等场景
- 缓存
通用装饰器
装饰器课上练习:
引入日志的装饰器
多个装饰器装饰:判断用户是否登陆,判断用户是否有权限
注意:1.上面的装饰器先执行,后面的装饰器后执行 2.函数先被下面的装饰器装饰
多个装饰器装饰:1.判断用户是否登陆 2.判断用户是否有权限 3.系统中的用户信息
如果装饰器需要传递参数,在原有的装饰器外面嵌套一个函数既可
内置高阶函数
什么是高阶函数?
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象
的编程范式。
map函数
map() 会根据提供的函数对指定序列做映射。
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
map应用案例
reduce函数
reduce() 函数会对参数序列中元素进行累积。
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个结果。
reduce的应用案例
利用reduce求10的阶乘
filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个序列。
用filter函数获取100以内能被3或者5整除的所有数
用filter函数获取2000年-2999年的所有闰年
用filter函数获取1000以内所有的素数
内置高阶函数sorted/max/min
sorted() 函数对所有可迭代的对象进行排序操作。返回重新排序的列表。
sorted(iterable, key=None, reverse=False)
key: 主要是用来进行比较的元素,只有一个参数,
reverse: 排序规则,True 降序 ,False 升序(默认)。
python排序sort()和sorted()的区别是什么?
- 排序对象不同: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
- 返回值不同:
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,
内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
max函数与min函数应用案例
用sorted函数将所有的偶数移到前面,所有的奇数移到后面