decoder 介绍
python decoder(装饰器)是python的高级用法,用来拓展函数或类的功能。不过也增加初学者
阅读代码的难度
例如flask可以在需要验证用户登录的请求函数上添加装饰器,只有当用户登录了才可以调用该>页面,非常方便
原理
decoder 其实也是一个函数,装饰器函数会返回真实函数,并会增加额外的代码,如
1 | # 定义wraper |
输出
func called
Hello bob
使用wraper 的原因
提供额外的功能,例如计时,日志等。 另外wraper还有更多强大的功能
1 | def fib(n): |
这种递归调用非常费时,而使用wraper 可以提供一个缓存器
1 | def memory(func): |
类wrapr 可以增加参数,相比函数装饰器,类装饰器具有更加灵活,封装性更好等优点~
wraper 带来的问题
- 改变原来的函数属性,例如函数名, 因为装饰器用新函数替换了原来的旧函数。 所以新函>数少了旧函数的属性
解决办法
1 | import functools |
- 获取参数
1 |
|
此时会报错,a在赋值之前引用了。 需要将a声明为 nonlocal