python-带能数的装饰器
from functools import wraps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
带参数的装饰器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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' ) |
1 2 3 4 5 | @与outter(flag)两部份 第一步:outter(flag)返回给wrapper1 第二步:@wrapper1 两步后语法糖转化为: wrapper1 = utter(flag) |
多个装饰器装饰同一个函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 '哈哈' |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步