码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-05 17:10:50      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:这一   关于   扩展   gif   gpo   wrap   war   额外   程序   

一、装饰器的执行流程

技术分享图片
 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 2.@wrapper   ==   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_装饰器、带参数的装饰器、多个装饰器装饰一个函数

标签:这一   关于   扩展   gif   gpo   wrap   war   额外   程序   

原文地址:https://www.cnblogs.com/weihengblog/p/8418160.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!