博客
关于我
九.Python_装饰器
阅读量:321 次
发布时间:2019-03-04

本文共 1427 字,大约阅读时间需要 4 分钟。

Python装饰器是一种强大的工具,用于在不修改目标函数的情况下为函数附加功能。其核心原则是保持目标函数的完整性和可调用性,同时扩展其功能。装饰器通常由高阶函数、函数嵌套和闭包组成,能够灵活处理各种场景。

装饰器的基本用法

最常见的装饰器功能是为函数添加性能监控。以下是一个简单的实现示例:

import timedef timer(func):    def wrapper(*args, **kwargs):        start_time = time.time()        result = func(*args, **kwargs)        stop_time = time.time()        print(f"函数运行时间为:{stop_time - start_time}")        return result    return wrapper@timerdef calculate_sum(numbers):    return sum(numbers)# 输出结果print(calculate_sum([1, 2, 3, 4, 5]))  # 输出:函数运行时间为:0.01秒

这个装饰器通过包装目标函数,记录并打印其运行时间,同时保持了函数的正常调用方式。

循环函数的装饰器

装饰器还可以用于对函数进行控制流的扩展。例如,以下装饰器用于对函数进行循环执行:

def decorator(max_times):    def actual_decorator(func):        def wrapper(*args, **kwargs):            for _ in range(max_times):                print("正在执行函数...")                result = func(*args, **kwargs)                print("函数执行完成")                return result        return wrapper    return actual_decorator@decorator(3)def power_calculation(x, y):    return x ** y# 执行结果将在控制台打印输出print(power_calculation(2, 3))  # 输出:正在执行函数... 函数执行完成 8

这个装饰器通过在指定次数内重复执行目标函数,并在每次执行前后打印信息,扩展了函数的功能。

测试与验证

为了验证装饰器的正确性,可以编写测试函数并观察结果。例如,以下是对calculate_sum函数的测试:

@timerdef test_function():    print("测试函数开始执行...")    return Trueprint(test_function())  # 输出:测试函数开始执行... 函数运行时间为:0.01秒

这个测试案例验证了装饰器在记录函数运行时间方面的有效性。

总结

Python装饰器通过灵活的设计和高效的实现,为函数开发和维护提供了强大的工具。无论是性能监控还是控制流扩展,装饰器都能在不破坏目标函数的前提下,添加所需功能。这使得代码更加灵活、可维护性更强,同时也为复杂的功能扩展提供了可能性。

转载地址:http://mvnq.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 使用OpenCV图像修复技术去除眩光
查看>>
OpenCV与AI深度学习 | 使用OpenCV检测并计算直线角度
查看>>
OpenCV与AI深度学习 | 使用OpenCV轮廓检测提取图像前景
查看>>
OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
查看>>
OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
查看>>
OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
查看>>
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
查看>>
OpenCV与AI深度学习 | 初学者指南 -- 什么是迁移学习?
查看>>
OpenCV与AI深度学习 | 十分钟掌握Pytorch搭建神经网络的流程
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于OpenCV实现模糊检测 / 自动对焦
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
查看>>
OpenCV与AI深度学习 | 基于YoloV11自定义数据集实现车辆事故检测(有源码,建议收藏!)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8 + BotSORT实现球员和足球检测与跟踪 (步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8实现高级目标检测和区域计数
查看>>