首页 > 编程知识 正文

Python装饰器前世今生

时间:2023-11-22 09:44:03 阅读:296184 作者:ETVZ

Python装饰器是Python语言中的一种特殊语法元素,可以用于装饰函数或类,使其具有额外的功能。装饰器在Python的发展历程中起到了重要的作用,本文将从多个方面介绍Python装饰器的前世今生。

一、装饰器的定义

装饰器是一种函数,可以在不修改被装饰对象源代码的情况下,为其添加额外的功能。装饰器的基本结构如下所示:

def decorator(func):
    def wrapper(*args, **kwargs):
        # 添加额外功能的代码
        return func(*args, **kwargs)
    return wrapper

装饰器接受一个函数作为参数,并返回一个新的函数,新函数需要执行额外的功能,并调用原始函数。

二、装饰器的应用

装饰器在Python中的应用非常广泛,常见的应用场景包括:

1. 计时器

装饰器可以用于实现函数的计时功能,可以统计函数的执行时间。

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print('函数 {0} 的执行时间为 {1} 秒'.format(func.__name__, end_time - start_time))
        return result
    return wrapper

@timer
def foo():
    time.sleep(2)
    print('Hello, World!')

foo()

输出结果:

Hello, World!
函数 foo 的执行时间为 2.000496864318848 秒

2. 权限校验

装饰器可以用于对函数进行权限校验,只有具备特定权限的用户才能执行被装饰的函数。

def permission_check(func):
    def wrapper(*args, **kwargs):
        if check_permission():
            return func(*args, **kwargs)
        else:
            print('您没有权限执行该操作')
    return wrapper

@permission_check
def delete_data():
    print('删除数据')

delete_data()

输出结果:

您没有权限执行该操作

三、装饰器的进化

Python的装饰器在发展历程中不断进化,有更多的用法和扩展,例如:

1. 带参数的装饰器

装饰器可以接受参数,来控制装饰器的行为。

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

@repeat(3)
def greet():
    print('Hello')

greet()

输出结果:

Hello
Hello
Hello

2. 类装饰器

装饰器也可以是一个类,需要实现`__call__`方法。

class Logger:
    def __init__(self, func):
        self.func = func
        
    def __call__(self, *args, **kwargs):
        print('开始执行函数:{0}'.format(self.func.__name__))
        result = self.func(*args, **kwargs)
        print('执行完毕')
        return result

@Logger
def add(a, b):
    return a + b

print(add(1, 2))

输出结果:

开始执行函数:add
执行完毕
3

四、总结

Python装饰器是Python语言中非常有用的特性,可以为函数或类添加额外的功能。装饰器在Python的发展历程中不断进化,具有丰富的应用场景。通过掌握和使用装饰器,可以提高代码的可复用性和扩展性。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。