Python装饰器:让代码更优雅的魔法工具

简介: Python装饰器:让代码更优雅的魔法工具

Python装饰器:让代码更优雅的魔法工具

在Python中,装饰器(Decorator)是一种强大的语法特性,它允许我们在不修改原函数代码的情况下,为函数添加新功能。这种“元编程”能力让Python代码更加简洁优雅。

装饰器是什么?

装饰器本质上是一个接受函数作为参数的高阶函数,它返回一个新函数,通常用于扩展原函数的行为。这种模式遵循“开放-封闭”原则:对扩展开放,对修改封闭。

一个简单示例

def timer_decorator(func):
    import time
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} 执行时间: {end-start:.4f}秒")
        return result
    return wrapper

@timer_decorator
def slow_function():
    time.sleep(1)
    return "完成"

# 调用时会自动计时
result = slow_function()

装饰器的应用场景

  1. 性能监控:如上面的执行时间统计
  2. 权限验证:检查用户是否有权访问某个函数
  3. 日志记录:自动记录函数调用信息
  4. 缓存机制:存储函数结果,避免重复计算
  5. 输入验证:检查函数参数的有效性

使用functools.wraps

为了避免装饰器带来的元数据丢失问题,建议使用functools.wraps

from functools import wraps

def my_decorator(func):
    @wraps(func)  # 保留原函数的元数据
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper

装饰器是Python中极其有用的工具,掌握它能让你写出更加简洁、可维护的代码。从简单的功能增强到复杂的框架设计,装饰器无处不在,是每个Python开发者都应该掌握的“魔法”技能。

相关文章
|
5月前
|
Python
Python类型提示:让代码更清晰、更可靠
Python类型提示:让代码更清晰、更可靠
355 133
|
域名解析 网络协议 应用服务中间件
服务器主机名值命名规范
服务器主机名值命名规范
1180 0
|
28天前
|
人工智能 测试技术 API
GLM 5.2深度实战:API快速集成、MIT权重配置与百万上下文能力验证
GLM 5.2是智谱AI于2026年6月推出的旗舰级大模型,凭借744B总参数MoE混合专家架构、原生支持100万Token稳定上下文窗口,以及MIT许可开源权重,成为当前开源模型领域的标杆产品。该模型不仅在长程编程、文档分析等任务中表现突出,还提供了Z.ai Coding Plan托管API与MIT开源权重两种接入路径,满足个人开发者、企业团队的不同使用需求。本文将从API快速接入、MIT开源权重本地部署、百万上下文能力实测三大核心环节,提供完整实战指南,帮助开发者高效落地GLM 5.2。
562 1
|
1月前
|
存储 人工智能 自然语言处理
2026年618活动期间有阿里云AI产品有哪些优惠?618活动AI产品与大模型产品活动介绍
阿里云2026年618活动已开启,AI产品与大模型优惠力度空前。通用权益方面,个人与企业可分别领取最高360元和1728元满减礼包。核心亮点为Qwen3.7系列限时5折,QoderWork CN首月0元,秒悟新注册送1万积分,加入OPC赢百万助力金。大模型层面,开通百炼享1亿+免费tokens,AI通用型节省计划低至5.3折,Token Plan多档套餐灵活选配,HappyHorse视频生成模型限时8折。此外还有先用后返最高返200元、超30款AI产品免费试用等福利,覆盖从个人开发者到企业用户的多层次需求。
|
3月前
|
人工智能 算法 搜索推荐
语义重构与数字信任:"两大核心+四轮驱动"Geo优化方法论的范式崛起
在生成式AI重塑信息生态的背景下,传统SEO正转向GEO(生成式引擎优化)。于磊首创“两大核心+四轮驱动”方法论:以“人性化Geo”降低语义熵,以“内容交叉验证”筑牢数字信任;通过EEAT原则、结构化数据、SEO兼容策略与精准引证,系统提升AI采纳率。已助力金融、医药等行业实现AI首条展现率+45%、转化率+110%,成为当前最成熟、可持续的GEO实践体系。
301 3
|
1月前
|
设计模式 人工智能 JSON
Skills-first:一种全新的接口自动化测试设计模式(爆肝万字实操)
本文提出“Skills-first”测试新范式,直击AI生成用例后维护难的痛点:告别“人驱动AI”,转向“事件驱动”。通过感知层捕获变化、决策层输出结构化操作原语、执行层精准落地,实现用例自动演进。实测将接口变更响应从2小时压缩至4分钟,释放80%机械维护人力。
|
1月前
|
人工智能 JSON 测试技术
接口自动化测试的下一个十年:从脚本到Skills,让AI学会“如何测”
本文探讨接口自动化测试的范式升级:从低效脚本维护转向AI驱动的“技能(Skills)”模式。指出脚本堆积不等于测试能力,核心在于沉淀可推理的业务规则与契约。通过三层机制(业务知识层、策略生成层、执行反馈层),实现从“执行指令”到“理解意图”的跃迁。强调测试工程师的新价值——定义“如何测”,而非写多少行代码。
|
4月前
|
设计模式 监控 JavaScript
VUE前端进阶知识整理(终)
教程来源 https://app-aaqhxe29haf5.appmiaoda.com 本文系统讲解Vue进阶核心:设计模式(发布-订阅、工厂、组合、策略、装饰器)在源码与开发中的应用;企业级工程化实践(Vite+TS+Pinia+RBAC权限+Vitest测试+监控告警);以及Vue 3.6+新特性(Vapor Mode无VDOM、编译优化)。助力开发者从使用者蜕变为架构设计者。
|
人工智能 运维 Prometheus
别只盯着监控图了,大模型才是服务质量的新保镖!
别只盯着监控图了,大模型才是服务质量的新保镖!
412 13
|
SQL 人工智能 分布式计算
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
320 0