Python中的装饰器详解及实际应用【第120篇—装饰器详解】

慈云数据 1年前 (2024-03-20) 技术支持 43 0

👽发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。

Python中的装饰器详解及实际应用

在Python编程中,装饰器(Decorator)是一种强大而灵活的工具,用于修改函数或方法的行为。它们广泛应用于许多Python框架和库,如Flask、Django等。本文将深入探讨装饰器的概念、使用方法,并提供实际应用的代码示例和详细解析。

IMG_20231006_135657_edit_22919206872021

装饰器是什么?

装饰器是一种特殊的函数,它可以接受一个函数作为参数,并返回一个新的函数,从而实现对原始函数的增强或修改。通过装饰器,我们可以在不修改原始函数代码的情况下,添加新的功能或行为。

基础概念

1. 简单的装饰器

让我们从一个简单的装饰器开始:

def my_decorator(func):
    def wrapper():
        print("在函数执行之前执行一些操作")
        func()
        print("在函数执行之后执行一些操作")
    return wrapper
@my_decorator
def say_hello():
    print("Hello!")
say_hello()

上述代码中,my_decorator 是一个装饰器函数,它接受一个函数 func 作为参数,返回一个新的函数 wrapper。通过 @my_decorator 语法,我们将 say_hello 函数传递给装饰器,实际上等同于执行了 say_hello = my_decorator(say_hello)。运行这段代码,你会看到在调用 say_hello 函数时,会在执行前后分别输出一些信息。

2. 带参数的装饰器

有时我们需要在装饰器中传递一些参数,可以通过在装饰器外再包一层函数来实现:

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator
@repeat(3)
def say_hello():
    print("Hello!")
say_hello()

这个例子中,repeat 是一个带参数的装饰器,用来指定函数执行的次数。通过 @repeat(3),我们将 say_hello 函数重复执行3次。

实际应用

1. 记录函数执行时间

import time
def timing_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"函数 {func.__name__} 执行时间:{end_time - start_time} 秒")
        return result
    return wrapper
@timing_decorator
def time_consuming_function():
    # 模拟耗时操作
    time.sleep(2)
    print("函数执行完成")
time_consuming_function()

这个例子展示了如何使用装饰器记录函数的执行时间,从而方便性能分析

2. 权限验证装饰器

def check_permission(role):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if role == "admin":
                result = func(*args, **kwargs)
                return result
            else:
                raise PermissionError("权限不足")
        return wrapper
    return decorator
@check_permission(role="admin")
def sensitive_operation():
    print("敏感操作已完成")
sensitive_operation()

通过这个例子,我们可以了解如何使用装饰器进行权限验证,只有具备管理员权限的用户才能执行敏感操作。

装饰器是Python中强大而灵活的特性,能够优雅地实现代码的增强和修改。通过本文的介绍,你应该对装饰器的基本概念、使用方法以及实际应用有了更深入的了解。在实际项目中,充分利用装饰器可以使代码更具可读性可维护性,并提高开发效率

装饰器进阶应用

3. 缓存装饰器

from functools import lru_cache
@lru_cache(maxsize=3)
def fibonacci(n):
    if n 
微信扫一扫加客服

微信扫一扫加客服