22_装饰器带参数的装饰器多个装饰器装饰一个函数

Posted 短毛兔

tags:

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

一、装饰器的执行流程

技术分享图片
 1 def wrapper(func):
 2     def inner(*args,**kwargs):
 3         ret = func(*args,**kwargs)
 4         return ret
 5     return inner
 6 
 7 @wrapper   #fun = wrapper(fun)
 8 def fun(s):
 9     print(666)
10     return s
11 
12 fun(777)
13 print(fun(777))
14 
15 ‘‘‘
16 1.程序至上而下,遇到wrapper() 保存到内存中
17 [email protected]   ==   fun = wrapper(fun)  
18 3.执行wrapper(fun)   --> return inner
19 4.return  inner  --->  fun = inner
20 5.fun = inner
21 6.把fun()放到内存中
22 7.执行fun()  ->  inner()
23 8.print(‘666‘)
24 9.renturn ret --> return s
25 ‘‘‘
装饰器执行流程

二、开放封闭原则

关于开放封闭原则,其核心的思想是:
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
因此,开放封闭原则主要体现在两个方面:
对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
装饰器完美吻合这一原则,在不改变被修饰函数以及业务逻辑前提下,额外的添加功能。

三、带参数的装饰器

 1 import time
 2 
 3 flag = False
 4 def out(flag):
 5     flag = flag
 6     def wrapper(func):
 7         def inner(*args,**kwargs):
 8             if flag:
 9                 start_time = time.time()
10                 time.sleep(1)
11                 ret = func(*args,**kwargs)
12                 end_time = time.time()
13                 return end_time - start_time
14             else:
15                 func(*args,**kwargs)
16         return inner
17     return wrapper
18 
19 @out(True)  #out(True/False)   ->  返回的是wrapper ===>>>  @wrapper
20 def func():
21     print(666)
22 
23 func()

四、多个装饰器装饰一个函数

 

以上是关于22_装饰器带参数的装饰器多个装饰器装饰一个函数的主要内容,如果未能解决你的问题,请参考以下文章

python装饰器1

python高级之装饰器

装饰器带参数

10-5装饰器进阶_带参数的装饰器多个装饰器装饰同一个函数

Python——装饰器(两种不同的使用场景)

装饰器