为什么要使用装饰器?
在不改变原函数功能的情况,为了添加新的功能 我们可以在函数运行前后给函数添加新的功能
1 def outer(func): 2 #fun()等于原f1函数 3 def inner(): 4 print('ccccc') 5 r=func() 6 print('dddd') 7 return r 8 return inner 9 @outer 10 #@outer代表运行了2个步骤:1.将f1作为参数运行outer函数,2.新函数f1=inner() 11 def f1(): 12 print('很复杂') 13 r=f1() 14 print(r) 15 #输出:ccccc 16 # 很复杂 17 # dddd 18 # None
两个装饰器的作用
def outer_1(func): def inner(*args,**kwargs): print('aaaa') r=func(*args,**kwargs) print('bbbb') return r return inner def outer(func): def inner(*args,**kwargs): print('ccccc') r=func(*args,**kwargs) print('dddd') return r return inner @outer_1 @outer def f1(a1,a2): print('很复杂') return a1+a2 r=f1(2,4) print(r) #输出: aaaa ccccc 很复杂 dddd bbbb 6