python自动化开发-4
装饰器之我见
python里的装饰器到底是个什么东东,初看起来,可能有的小伙伴会发懵啊,哈哈。
先来个装饰器的例子瞅瞅:

1 Author:RYB 2 # __*__coding:utf-8__*__ 3 4 ''' 5 dec函数通过用户名和密码实现验证功能。 6 ''' 7 def dec(func): 8 def auth(): 9 username = "ryb" 10 password = "123456" 11 user = input("username:").strip() 12 passwd = input("password:").strip() 13 if user == username and passwd == password: 14 msg = print("验证通过,欢迎来到京东商城!") 15 elif user == username and passwd != password: 16 msg = print("密码不正确,请输入正确的密码!") 17 elif user != username and passwd != password: 18 msg = print("用户名和密码均不正确,请输入正确的用户名和密码!") 19 else: 20 msg = print("用户名不正确,请输入正确的用户名!") 21 return auth 22 23 #@dec <==> jd=dec(jd),dec函数用来给jd函数添加验证功能,所以dec函数是装饰器。 24 @dec 25 def jd(): 26 print("welcome to jd!") 27 28 #执行jd函数 29 jd()
上面装饰器例子(函数版):可读性更强一些哈哈

1 # Author:RYB 2 # __*__coding:utf-8__*__ 3 4 #用户名和密码都正确 5 def user_passd_right(): 6 msg = print("验证通过,欢迎来到京东商城!") 7 8 9 #用户名正确,密码不正确 10 def useright_passd(): 11 print("密码不正确,请输入正确的密码!") 12 13 #用户不正确,密码正确 14 def user_passdright(): 15 print("用户名不正确,请输入正确的用户名!") 16 17 #用户名和密码都不正确 18 def user_passd(): 19 print("用户名和密码均不正确,请输入正确的用户名和密码!") 20 21 ''' 22 dec函数通过用户名和密码实现验证功能。 23 ''' 24 def dec(func): 25 def auth(): 26 username = "ryb" 27 password = "123456" 28 user = input("username:").strip() 29 passwd = input("password:").strip() 30 if user == username and passwd == password: 31 user_passd_right() 32 func() 33 elif user == username and passwd != password: 34 useright_passd() 35 elif user != username and passwd != password: 36 user_passd() 37 else: 38 user_passdright() 39 return auth 40 41 #@dec <==> jd=dec(jd),dec函数用来给jd函数添加验证功能,所以dec函数是装饰器。 42 @dec 43 def jd(): 44 print("welcome to jd!") 45 46 #执行jd函数 47 jd()
那么到底装饰器是个什么东西呢?我想,通过上面的例子说的通俗一些,伙伴们多少知道一些吧。装饰器其实也是一个函数,一个用来包装函数的函数,装饰即修饰,意指为其他函数添加新功能。
装饰器定义:本质就是函数,功能是为其他函数添加新功能
装饰器需要遵循的原则:
1.不修改被装饰函数的源代码(开放封闭原则);
2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式。
装饰器知识储备:装饰器=高阶函数+函数嵌套+闭包
。
装饰器的例子1:

1 # Author:RYB 2 # __*__coding:utf-8__*__ 3 import time 4 5 def timer(func): 6 def wrapper(): 7 start_time = time.time() 8 func() 9 stop_time = time.time() 10 print('run time is %s' %(stop_time-start_time)) 11 return wrapper 12 #@timer等价index=timer(index) 13 @timer 14 def index(): 15 print("in the index") 16 index()
运行结果如下:
in the index
run time is 0.0
装饰器的例子2:有参数的

1 # Author:RYB 2 # __*__coding:utf-8__*__ 3 4 import time 5 def timer(func): 6 def wrapper(*args,**kwargs): 7 start_time = time.time() 8 res=func(*args,**kwargs) 9 stop_time = time.time() 10 print('run time is %s' %(stop_time-start_time)) 11 return res 12 return wrapper 13 14 #@timer等价index=timer(index) 15 @timer 16 def index(msg): 17 print("in the index:",msg) 18 return 1 19 res=index("hello myworld") 20 print(res)
运行结果:
in the index: hello myworld
run time is 0.0
1
你不向我走来,我便向你走去。
分类:
自动化开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性