python笔记(五)装饰器函数

装饰器函数

装饰器的本质:一个闭包函数

装饰器的功能:在不修改原函数及其调用方式的情况下对原函数的功能镜像扩展

装饰器的原则:对扩展开放,对修改封闭

装饰器的固定格式

 1 def wrapper(func):
 2     def inner(*args,**kwargs)
 3         '''执行函数前要做的内容'''          
 4         ret = func(*args,**kwargs)
 5         '''执行函数后要做的内容'''
 6         return ret
 7     return inner
 8 #以上为装饰器的固定格式
 9 @wrapper  # get=wrapper(get)=inner 语法糖
10 def get()
11     pass    

带参数的装饰器

 1 def outer(flag):
 2     def timer(func):
 3         def inner(*args,**kwargs):
 4             if flag:
 5                 print('''执行函数之前要做的''')
 6             re = func(*args,**kwargs)
 7             if flag:
 8                 print('''执行函数之后要做的''')
 9             return re
10         return inner
11     return timer
12 @outer(False)  # 套上一个新的函数即可
13 def func():
14     print(111)
15 func()

多个装饰器装饰同一个函数

 1 def wrapper1(func):
 2     def inner():
 3         print('wrapper1 ,before func')
 4         func()
 5         print('wrapper1 ,after func')
 6     return inner
 7 
 8 def wrapper2(func):
 9     def inner():
10         print('wrapper2 ,before func')
11         func()
12         print('wrapper2 ,after func')
13     return inner
14 
15 @wrapper2
16 @wrapper1
17 def f():
18     print('in f')
19 
20 f()

猜你喜欢

转载自www.cnblogs.com/zxq520921/p/9420487.html