python 装饰器
装饰器:本质是一个闭包
作用:在不改变原有函数调用的情况下,给函数增加新的功能
def wrapper(fn): wrapper: 装饰器, fn: 目标函数
def inner(*args, **kwargs):
# 在目标函数执行之前...
ret = fn(*args, **kwargs) 执行目标函数
# 在目标函数执行之后...
return ret
return inner # 千万别加小括号
@wrapper
def target():
pass
# 运行被装饰函数
taget() # => inner()
一个函数可以被多个装饰器修饰。
@wrapper1
@wrapper2
def target():
pass
规则和规律 wrapper1 wrapper2 target wrapper2 wrapper1
示例
def ggg(fn):
def inner(*args, **kwargs):
print('开始')
res = fn(*args)
print('结束')
return res
return inner
@ggg
def func(user, passw):
print(f'账户登录 {user}: {passw}')
return '123'
print(func('zhangsan', 123))
'''
解析:
运行fun c('zhangsan', 123)时,先调用ggg(@表示要先进去后面函数),进而ggg返回inner,即func表示为inner,进一步调用inner。
'''
输出:
开始
账户登录 zhangsan: 123
结束
123
更多:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构