Python装饰器:让代码优雅如诗

简介: Python装饰器:让代码优雅如诗

Python装饰器:让代码优雅如诗

在Python的世界里,装饰器(Decorator)就像一位魔法师,能以最优雅的方式增强函数功能,却不改变其本质。今天我们就来探索这个强大而优雅的特性。

什么是装饰器?

装饰器本质上是一个接受函数作为参数并返回新函数的可调用对象。它遵循“开放-封闭”原则:对扩展开放,对修改封闭。

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

@timer
def heavy_computation():
    # 模拟耗时操作
    time.sleep(2)

装饰器的妙用

  1. 性能监控:自动记录函数执行时间
  2. 权限验证:统一检查用户权限
  3. 日志记录:自动记录函数调用信息
  4. 缓存优化:实现函数结果缓存(Memoization)

进阶技巧:带参数的装饰器

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"Hello, {name}!")

为什么使用装饰器?

装饰器让横切关注点(如日志、验证)与业务逻辑分离,代码更加模块化、可复用。它是Python元编程的典范,体现了“Python之禅”中“优美胜于丑陋”的理念。

掌握装饰器,你的Python代码将变得更加简洁、强大而优雅。从今天开始,尝试用装饰器重构你的代码吧!

相关文章
|
5月前
|
JSON API 数据格式
Python 3.12 新特性:更优雅的类型提示实践
Python 3.12 新特性:更优雅的类型提示实践
407 135
|
6月前
|
人工智能 关系型数据库 Serverless
2 天,用函数计算 AgentRun 爆改一副赛博朋克眼镜
2 天将吃灰的 Meta 眼镜改造成“交警Copilot”:通过阿里云函数计算 AgentRun 实现端-管-云协同,利用 Prompt 驱动交通规则判断,结合 OCR 与数据库查询,打造可动态扩展的智能执法原型,展现 Agent 架构在真实场景中的灵活与高效。
643 45
|
5月前
|
机器学习/深度学习 数据可视化 关系型数据库
【重磅原创改进代码】基于自适应峰谷感知(APVP)多头注意力(MHA)多任务学习(MTL)的多变量多输出时间序列预测【电气综合能源】(Python代码实现)
【重磅原创改进代码】基于自适应峰谷感知(APVP)多头注意力(MHA)多任务学习(MTL)的多变量多输出时间序列预测【电气综合能源】(Python代码实现)
289 2
|
5月前
|
算法 新能源 Python
【下垂控制与虚拟同步机】下垂控制与虚拟同步机两种并网型(grid-forming)控制策略的性能研究(Simulink仿真实现)
【下垂控制与虚拟同步机】下垂控制与虚拟同步机两种并网型(grid-forming)控制策略的性能研究(Simulink仿真实现)
283 1
|
存储 弹性计算 数据管理
阿里云对象存储OSS怎么收费?存储包流量包还是按量?
阿里云对象存储OSS收费有两种计费模式,即包年包月和按量付费,包年包月是指购买存储包、流量包来抵扣OSS产生的存储费核流量费,OSS标准(LRS)存储包100GB优惠价33元、500GB存储包半年162元、OSS存储包40GB一年9元,OSS流量包100G 49元/月
9517 2
阿里云对象存储OSS怎么收费?存储包流量包还是按量?
|
数据采集 SQL 开发框架
菜刀webshell特征分析
菜刀webshell特征分析
829 0
菜刀webshell特征分析
|
弹性计算 应用服务中间件
请将文件MP_verify_N8no8dpNO9n7wuBZ.txt上传至XXX指向的web服务器(或虚拟主机)的目录
请将文件MP_verify_N8no8dpNO9n7wuBZ.txt上传至XXX指向的web服务器(或虚拟主机)的目录
1968 0
请将文件MP_verify_N8no8dpNO9n7wuBZ.txt上传至XXX指向的web服务器(或虚拟主机)的目录
|
安全 网络协议 网络安全
Python 渗透测试:黑客内外网信息收集.(帮助 得到信息攻击计算机内外网.)
Python 渗透测试:黑客内外网信息收集.(帮助 得到信息攻击计算机内外网.)
442 0
|
安全 关系型数据库 数据库
在 Postgres 中使用 Drop Column
【8月更文挑战第11天】
864 0
|
存储 算法 C语言
芯片验证 | SystemVerilog使用简介
芯片验证 | SystemVerilog使用简介
611 0