现在取一些网络教程中的例子来看看,是不是感觉很清新了呢。
被封装的函数不带参数

由于my_function前面用了装饰器,
所以print(my_function())
这里的my_function不再是原来的那个函数
而是装饰器里的内部函数wrapper
如果你理解my_function实质上是wrapper函数(核心),
一切都是如此简单
被封装的函数带有参数


新内容
1. 保留原函数的属性
被封装的函数,已经不再是原来的函数(说了无数遍了!!!你再理解不了,宝宝也没辙了),
那么要如何保留原函数的属性呢?
python的functools.wraps给我们带来了解决方法
__name__函数名,__doc__注释内容


2. 一个函数使用多个装饰器
1.原则是 “靠近装饰目标函数定义的装饰器先执行,然后依次执行上面的”(重点)
2.一个函数理论上可以使用多个装饰器,但不建议用三个甚至更多,因为太晦涩


运行逻辑:
程序先执行decorator2,再执行decorator1
f(3)实际上是g2(3),result2=3,打印'程序在执行2',result2*result2 = 9
g1(9),result1 = 9,打印'程序在执行1',打印9,result1+result1 = 18,打印18

运行逻辑:
程序先执行decorator1,再执行decorator2
f(3)实际上是g1(3),result1=3,打印'程序在执行1',打印3
result1+result1 = 6,
g2(6),result2 = 6,打印'程序在执行2',result2*result2 = 36,打印36
至此装饰器的学习告一段落.
网友评论