当前位置:首页 > Python > 正文内容

Python 装饰器完全指南:从原理到实战应用

admin3周前 (03-24)Python34

什么是装饰器?

装饰器(Decorator)是 Python 中一个非常强大的功能,它允许你在不修改原函数代码的情况下,为函数添加额外的功能。装饰器本质上是一个接受函数作为参数,并返回一个新函数的高阶函数。

装饰器的应用场景非常广泛:日志记录、性能计时、权限验证、缓存、重试机制等都可以通过装饰器优雅地实现。

函数装饰器的基础

让我们从一个最简单的例子开始。假设我们想在执行函数前后打印一些信息:

def simple_decorator(func):\n    def wrapper():\n        print("执行函数前...")\n        func()\n        print("执行函数后...")\n    return wrapper\n\n@simple_decorator\ndef say_hello():\n    print("Hello, World!")\n\n# 调用函数\nsay_hello()\n

输出结果:

执行函数前...\nHello, World!\n执行函数后...\n

这里的关键是:@simple_decorator 语法糖实际上是 say_hello = simple_decorator(say_hello) 的简写形式。

处理带参数的函数

上面的简单装饰器只能处理无参数的函数。如果原函数有参数,我们需要用 *args 和 **kwargs 来传递任意参数:

def log_decorator(func):\n    def wrapper(*args, **kwargs):\n        print(f"调用函数: {func.__name__}")\n        print(f"参数: args={args}, kwargs={kwargs}")\n        result = func(*args, **kwargs)\n        print(f"返回值: {result}")\n        return result\n    return wrapper\n\n@log_decorator\ndef add_numbers(a, b, multiplier=1):\n    return (a   b) * multiplier\n\nresult = add_numbers(3, 5, multiplier=2)\n

输出结果:

调用函数: add_numbers\n参数: args=(3, 5), kwargs={multiplier: 2}\n返回值: 16\n

带参数的装饰器

有时候我们需要装饰器本身接受参数。这需要再嵌套一层函数:

def repeat_decorator(times):\n    def decorator(func):\n        def wrapper(*args, **kwargs):\n            results = []\n            for _ in range(times):\n                result = func(*args, **kwargs)\n                results.append(result)\n            return results\n        return wrapper\n    return decorator\n\n@repeat_decorator(times=3)\ndef greet(name):\n    return f"Hello, {name}!"\nugs = greet("Alice")\nprint(results)\n

输出结果:

[Hello,                                            

相关文章

[Python 教程] OpenCV 实战:图像与视频文件处理

OpenCV 实战:图像与视频文件处理本文详细介绍如何使用 OpenCV 处理图像和视频文件,包括读取、显示、保存等操作。一、图像文件操作1.1 读取图像import cv2 #&nb...

Python 装饰器完全指南:从原理到实战的 5 个核心场景

装饰器(Decorator)是 Python 中最具魅力的特性之一。它允许我们在不修改原函数代码的前提下,动态地添加功能。但很多开发者对装饰器的理解仅停留在在函数上面加个@符号的层面。今天,我们将从底...

Python装饰器完全指南:从基础到高级应用

装饰器是 Python 中最强大也最容易被误解的特性之一。很多初学者听说过装饰器,但总是感觉云里雾里,不敢在实际项目中使用。本文从最基础的概念讲起,逐步深入到高级应用场景,通过大量原创示例代码帮助...

Python 生成器进阶:理解 yield 与构建高效迭代器

在 Python 开发中,我们经常需要处理大量数据或流式数据,如果一次性将所有数据加载到内存中,不仅会占用大量内存空间,还可能导致程序运行缓慢甚至崩溃。生成器(Generator)正是解决这个问题的利...

Python装饰器实战:从零到精通的5个经典场景

Python装饰器(Decorator)是一个非常强大且优雅的语言特性,它允许我们在不修改原函数代码的情况下,为函数添加额外的功能。本文将通过5个实战场景,带你深入理解装饰器的原理和应用。 一、装饰...

Python 装饰器高级实战:从基础到精通的5个实用技巧

引言:为什么要深入掌握装饰器? 装饰器是 Python 中最优雅的元编程工具之一,它能在不修改原函数代码的情况下,动态地增加功能。很多开发者都知道如何使用 @timer 计时或 @cache 缓存,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。