python中装饰器的作用

[复制链接]
发表于 2026-1-20 18:30:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在Python中,装饰器(Decorator)是一种强大的工具,它允许你在不修改原有函数代码的环境下,给函数增长新的功能。装饰器本质上是一个函数,它担当一个函数作为参数并返回一个新的函数,这个新函数通常是原函数的一个增强版本。装饰器遵照开放封闭原则,即对扩睁开放,对修改封闭,非常有利于代码的维护和复用。
装饰器的作用紧张包罗但不限于以下几点:

  •         日志日志记载:在不修改函数代码的条件下,为函数增长日志日志记载功能,方便跟踪函数实行环境或举行性能分析。
  •         性能测试:装饰器可以盘算并打印函数的实行时间,资助开辟者评估和优化代码性能
  •         权限校验:在Web开辟中,装饰器可以用于查抄用户是否有权限实行某个函数,从而简化权限管理逻辑。
  •         函数参数验证:装饰器可以对函数的输入参数举行验证,确保参数符合预期,淘汰因参数错误导致的错误。
  •         自动重试机制:在网络哀求等大概失败的场景中,装饰器可以实现自动重试机制,进步步伐的结实性。
自动重试机制举例:
  1. import time  
  2. import random  
  3.   
  4. def retry(max_attempts=3, delay=1):  
  5.     """  
  6.     装饰器,用于实现自动重试机制。  
  7.   
  8.     :param max_attempts: 最大重试次数,默认为3次。  
  9.     :param delay: 每次重试之间的延迟时间(秒),默认为1秒。  
  10.     :return: 返回一个新的函数,该函数封装了重试逻辑。  
  11.     """  
  12.     def decorator(func):  
  13.         def wrapper(*args, **kwargs):  
  14.             attempts = 0  
  15.             while attempts < max_attempts:  
  16.                 try:  
  17.                     return func(*args, **kwargs)  
  18.                 except Exception as e:  
  19.                     attempts += 1  
  20.                     if attempts >= max_attempts:  
  21.                         raise  # 如果达到最大重试次数,则重新抛出异常  
  22.                     print(f"Attempt {attempts} failed with {e}. Retrying in {delay} seconds...")  
  23.                     time.sleep(delay)  
  24.         return wrapper  
  25.     return decorator  
  26.   
  27. # 使用装饰器  
  28. @retry(max_attempts=5, delay=2)  
  29. def might_fail():  
  30.     """  
  31.     一个可能会失败的函数,这里用随机异常来模拟。  
  32.     """  
  33.     if random.random() > 0.8:  # 假设有20%的概率成功  
  34.         return "Success!"  
  35.     else:  
  36.         raise Exception("Something went wrong!")  
  37.   
  38. # 测试函数  
  39. try:  
  40.     print(might_fail())  
  41. except Exception as e:  
  42.     print(f"Failed after all attempts: {e}")
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表