def log(func):
def wrapper(*args,**kwargs):
return func(*args,**kwargs)
return wrapper
@log
def f():
···
相當(dāng)于執(zhí)行log(f)
如果有參數(shù)log('參數(shù)')(f)
=== wrapper(f)
def decorator_a(func):
print 'Get in decorator_a'
def inner_a(*args,**kwargs):
print 'Get in inner_a'
return func(*args,**kwargs)
return inner_a
def decorator_b(func):
print 'Get in decorator_b'
def inner_b(*args,**kwargs):
print 'Get in inner_b'
return func(*args,**kwargs)
return inner_b
@decorator_b
@decorator_a
def f(x):
print 'Get in f'
return x*2
f(1)
裝飾器其實(shí)在定義的時(shí)候就執(zhí)行了decorator_a
,decorator_b
(順序?yàn)閺南碌缴?所以會(huì)先打印出get in decorator_a
,和get in decoator_b
然后此時(shí)函數(shù)f已經(jīng)變成了innerb
,===inner_b(inner_a(f))
當(dāng)去調(diào)用f(1)
的時(shí)候听绳,會(huì)打印出get in inner_a
,然后去調(diào)用inner_a
泪勒,打印出 get in inner_a
,然后調(diào)用f
打印出 get in f
,結(jié)束