Python装饰器:给函数“穿外套”的优雅艺术

简介: Python装饰器:给函数“穿外套”的优雅艺术

Python装饰器:给函数“穿外套”的优雅艺术

你是否曾遇到过这样的场景——需要为多个函数添加相同的功能(比如计时、日志记录或权限验证)?如果每个函数都重复编写这些代码,不仅繁琐,还容易出错。今天,我们就来聊聊Python中解决这个问题的优雅方案:装饰器。

装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这就像给你的函数“穿上一件外套”,在不改变原有功能的基础上,添加额外行为。

来看个简单例子:假设我们需要计算函数执行时间。传统方式是在每个函数里编写计时代码,但使用装饰器可以这样做:

import time

def timer_decorator(func):
    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 heavy_calculation(n):
    # 模拟耗时计算
    time.sleep(1)
    return n * 2

# 调用时自动计时
result = heavy_calculation(5)

@timer_decorator这一行就是装饰器的语法糖,它等价于 heavy_calculation = timer_decorator(heavy_calculation)。调用heavy_calculation()时,实际上执行的是装饰器返回的wrapper函数。

Python还内置了@staticmethod@classmethod等常用装饰器。掌握装饰器不仅能让你写出更简洁、可维护的代码,更是深入理解Python函数式编程的关键一步。下次遇到需要“增强”函数功能的场景,不妨试试这个优雅的解决方案吧!

相关文章
|
4月前
|
机器学习/深度学习 数据可视化 关系型数据库
【重磅原创改进代码】基于自适应峰谷感知(APVP)多头注意力(MHA)多任务学习(MTL)的多变量多输出时间序列预测【电气综合能源】(Python代码实现)
【重磅原创改进代码】基于自适应峰谷感知(APVP)多头注意力(MHA)多任务学习(MTL)的多变量多输出时间序列预测【电气综合能源】(Python代码实现)
238 1
|
3月前
|
存储 网络协议 安全
C语言「内存对齐潜规则」:结构体里看不见的填充字节
内存对齐是CPU硬件要求的数据地址约束规则:变量须存于其字节大小的整数倍地址。编译器自动插入填充字节确保对齐,导致结构体体积“膨胀”、硬件寄存器读写错位或协议异常。合理排序成员(从大到小)、慎用`packed`、明确对齐控制,是嵌入式与底层开发的关键避坑要点。(239字)
|
4月前
|
传感器 机器学习/深度学习 算法
【无线传感器网络路由协议LEACH的研究与改进】LEACH、LEACH-C、TS-I-LEACH比较研究(Matlab代码实现)
【无线传感器网络路由协议LEACH的研究与改进】LEACH、LEACH-C、TS-I-LEACH比较研究(Matlab代码实现)
204 1
|
4月前
|
存储 机器学习/深度学习 编解码
基于大衍数构造的稀疏校验矩阵LDPC误码率matlab仿真,对比不同译码迭代次数,码率以及码长研究(Matlab代码实现)
基于大衍数构造的稀疏校验矩阵LDPC误码率matlab仿真,对比不同译码迭代次数,码率以及码长研究(Matlab代码实现)
211 1
|
4月前
|
算法
基于灰狼优化算法(GWO)整定单区域负荷频率控制PID研究(Matlab、Simulink仿真)
基于灰狼优化算法(GWO)整定单区域负荷频率控制PID研究(Matlab、Simulink仿真)
127 0
|
4月前
|
API 开发者 C++
用Python的FastAPI框架,5分钟搭建高性能API
用Python的FastAPI框架,5分钟搭建高性能API
437 139
|
7月前
|
消息中间件 存储 人工智能
官宣上线!RocketMQ for AI:企业级 AI 应用异步通信首选方案
RocketMQ 专门为 AI 场景推出了全新Lite Topic 模型,目前已在阿里云云消息队列 RocketMQ 版 5.x 系列实例上正式发布,并会逐步贡献到 Apache RocketMQ 开源社区,欢迎大家使用。
602 67
|
4月前
|
机器学习/深度学习 人工智能 运维
基于柯西分布量子粒子群优化的LTE网络基站覆盖率问题求解研究(Matlab代码实现)
基于柯西分布量子粒子群优化的LTE网络基站覆盖率问题求解研究(Matlab代码实现)
126 0
|
10月前
|
IDE 开发工具 Windows
磁盘损坏导致无法开机怎么办?
电脑无法开机可能是磁盘损坏所致,常见原因包括物理损坏、逻辑错误、接口问题或系统文件损坏。本文详解判断方法与应对措施,帮助你快速定位问题并恢复系统或数据。
|
4月前
|
机器学习/深度学习 算法 数据中心
混合储能并网逆变与控制,功率分配与能量管理,储能单元控制与SOC分区管理(仿真+参考文献)
混合储能并网逆变与控制,功率分配与能量管理,储能单元控制与SOC分区管理(仿真+参考文献)
238 0