装饰器 wrapper
转载 CSDN博主作者luoz_python原创
装饰器 wrapper
1.装饰器的作用
装饰器的作用就是为已经存在的函数或对象添加额外的功能。
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
2.无参数的装饰器
def debug(func):
def wrapper():
print('[DEBUG]: enter {}()'.format(func.__name__))
return func()
return wrapper
@debug
def say_hello():
print('hello!')
say_hello()
"""
[DEBUG]: enter say_hello()
hello!
"""
将 @debug 放在say_hello() 前面,相当于执行了
say_hello = debug(say_hello)
由于debug()是一个装饰器,返回了wrapper函数,所以原来的say_hello()依然存在,只是现在同名的now变量指向了新的函数,于是调用say_hello()将执行新的函数,即在debug()函数中返回的wrapper()函数。
将 @debug 放在say_hello() 前面,相当于执行了
say_hello = debug(say_hello)
由于debug()是一个装饰器,返回了wrapper函数,所以原来的say_hello()依然存在,只是现在同名的now变量指向了新的函数,于是调用say_hello()将执行新的函数,即在debug()函数中返回的wrapper()函数。
3.可变参数的装饰器
def debug(func):
def wrapper(*args, **kwargs):
print('[DEBUG]: enter {}()'.format(func.__name__))
return func(*args, **kwargs)
return wrapper
@debug
def say_hello(name, something):
print('hello!{}{}'.format(name, something))
say_hello('luozheng', '.')
"""
[DEBUG]: enter say_hello()
hello!luozheng.
"""
Python提供了可变参数*args和关键字参数**kwargs,有了这两个参数,装饰器就可以用于任意目标函数。
————————————————
版权声明:本文为CSDN博主「luoz_python」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luoz_java/article/details/90339876
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?