python装饰器初探
一、含有一个装饰器
1 #encoding: utf-8 2 3 ############含有一个装饰器######### 4 def outer(func): 5 def inner(*args, **kwargs):#要装饰f1(),这里用这俩形式参数,可以接受任意个参数,不管f1定义几个参数 6 print "1" 7 r = func(*args, **kwargs)#这里要用func,不要用f1 8 print "2" 9 return r 10 return inner 11 12 @outer #这里outer不要加括号 13 def f1(a1, a2): 14 print "a1 + a2 = " 15 return a1 + a2 16 17 f1(1,2)
二、含有两个(多个)装饰器
1 ############含有二个装饰器######### 2 3 def outer0(func):#第一个 4 def inner(*args, **kwargs): 5 print "AAAAAAAAA" 6 r = func(*args, **kwargs) 7 print "BBBBBBBB" 8 return r 9 return inner 10 11 def outer(func): #第二个 12 def inner(*args, **kwargs):#要装饰f1(),这里用这俩形式参数,可以接受任意个参数,不管f1定义几个参数 13 print "1" 14 r = func(*args, **kwargs)#这里要用func,不要用f1 15 print "2" 16 return r 17 return inner 18 @outer0 #俩装饰器,流程就是:执行f1()的时候,先执行outer0.inner(),outer0.inner().func调用outer的inner函数(即:将outer0.inner().func替换为outer.inner()),也就是outer.inner()函数作为outer0的参数, 19 # 然后outer.inner().func再调用f1()(即:将outer.inner().func替换为f1()) 20 @outer #这里outer不要加括号 21 def f1(a1, a2): 22 print "a1 + a2 = %d" %(a1+a2) 23 return 1 24 25 f1(1,2)