python-带能数的装饰器
from functools import wraps
from functools import wraps #引入一行
def wrapper(func_1):
@wraps(func_1) #加入一行
def inner(*args,**kwargs):
ret = func_1(*args,**kwargs)
return ret
return inner
@wrapper
def func_1(a):
print('来呀'+a)
return
# func_1 = wrapper(func_1)
func_1('c')
print(func_1.__name__)
如果不引入wraps,不加@wraps(func_1)时打印下面话打印出
$inner
加上引入,加@时打印
$func_1
带参数的装饰器
flag = True
def outter(flag):
def wrapper1(func_1):
def inner(*args,**kwargs):
if flag :
print('func_1 begin')
ret = func_1(*args,**kwargs)
print('func_1 end')
return ret
ret = func_1(*args,**kwargs)
return ret
return inner
return wrapper1
@outter(flag) # func_1 = wrapper(func_1)
def func_1(a):
print('来呀'+a)
return
@outter(flag) # func_1 = wrapper(func_1)
def func_2(a):
print('来呀'+a)
return
func_1('func_1')
func_2('func_2')
@与outter(flag)两部份 第一步:outter(flag)返回给wrapper1 第二步:@wrapper1 两步后语法糖转化为: wrapper1 = utter(flag)
多个装饰器装饰同一个函数
def wrapper1(func_1):
def inner(*args,**kwargs):
print('func_1 begin')
ret = func_1(*args,**kwargs)
print('func_1 end')
return ret
return inner
def wrapper2(func_1):
def inner(*args,**kwargs):
print('func_2 begin')
ret = func_1(*args,**kwargs)
print('func_2 end')
return ret
return inner
@wrapper2
@wrapper1 # func_1 = wrapper(func_1)
def func_1(a):
print('来呀'+a)
return '哈哈'
func_1('c')
$func_2 begin
$func_1 begin
$来呀c
$func_1 end
$func_2 end
'哈哈'

浙公网安备 33010602011771号