不传参装饰器fromfunctoolsimportwrapsdefwrapFunctionName(func):wraps(func)defwith_functionName(*args,**kwargs):print(ffunction{__name__}wrapped)returnfunc(*args,**kwargs)returnwith_functionNamewrapFunctionNamedeforiginFunction():print(forigin function)if__name__main:originFunction()传参装饰器fromfunctoolsimportwrapsdefwrapFunctionName(authorName):defwrapFunctionDecorator(func):wraps(func)defwith_wrapFunction(*args,**kwargs):ifauthorName!:print(ffunction{__name__}author:{authorName})returnfunc(*args,**kwargs)returnwith_wrapFunctionreturnwrapFunctionDecoratorwrapFunctionName(authorNamejason)deforiginFunction():print(forigin function)if__name____main__:originFunction()调用多个装饰器的执行方式fromfunctoolsimportwrapsdefa(func):wraps(func)defwith_a(*args,**kwargs):print(fa start)functionfunc(*args,**kwargs)print(fa end)returnfunctionreturnwith_adefb(func):wraps(func)defwith_b(*args,**kwargs):print(fb start)functionfunc(*args,**kwargs)print(fb end)returnfunctionreturnwith_babdeforiginFunction():print(forigin function)if__name____main__:originFunction()# a start# b start# origin function# b end# a end
python-装饰器
发布时间:2026/5/19 5:25:16
不传参装饰器fromfunctoolsimportwrapsdefwrapFunctionName(func):wraps(func)defwith_functionName(*args,**kwargs):print(ffunction{__name__}wrapped)returnfunc(*args,**kwargs)returnwith_functionNamewrapFunctionNamedeforiginFunction():print(forigin function)if__name__main:originFunction()传参装饰器fromfunctoolsimportwrapsdefwrapFunctionName(authorName):defwrapFunctionDecorator(func):wraps(func)defwith_wrapFunction(*args,**kwargs):ifauthorName!:print(ffunction{__name__}author:{authorName})returnfunc(*args,**kwargs)returnwith_wrapFunctionreturnwrapFunctionDecoratorwrapFunctionName(authorNamejason)deforiginFunction():print(forigin function)if__name____main__:originFunction()调用多个装饰器的执行方式fromfunctoolsimportwrapsdefa(func):wraps(func)defwith_a(*args,**kwargs):print(fa start)functionfunc(*args,**kwargs)print(fa end)returnfunctionreturnwith_adefb(func):wraps(func)defwith_b(*args,**kwargs):print(fb start)functionfunc(*args,**kwargs)print(fb end)returnfunctionreturnwith_babdeforiginFunction():print(forigin function)if__name____main__:originFunction()# a start# b start# origin function# b end# a end