欢迎访问宙启技术站
智能推送

Python函数的装饰器及应用实例介绍

发布时间:2023-07-06 18:04:15

Python中的装饰器是一种特殊的函数,它可以在不修改被装饰函数代码的情况下,动态地修改函数的行为。装饰器的使用可以简化代码,增加可读性,提高代码的复用性。

装饰器的定义使用了@符号,将装饰器函数放在被装饰函数的定义之前,并将被装饰函数作为参数传递给装饰器函数。装饰器函数对被装饰函数进行一些操作,然后返回修改后的函数或函数对象。

装饰器的应用非常广泛,可以用于实现函数的日志记录、权限检查、性能测试等功能。

下面通过几个案例介绍装饰器的使用。

1. 函数计时装饰器

import time

def timer(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

@timer
def my_func():
    time.sleep(1)

my_func()

这个例子中,timer装饰器函数接收一个函数作为参数,并在该函数执行前后记录时间。装饰器函数中定义了一个内部函数wrapper,用于真正执行被装饰的函数。最后,将装饰器应用于my_func函数,当my_func函数被调用时,会自动记录执行时间。

2. 日志记录装饰器

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"调用了{func.__name__}函数,参数:{args, kwargs}")
        return func(*args, **kwargs)
    return wrapper

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

add(1, 2)

这个例子中,logger装饰器函数接收一个函数作为参数,并在该函数执行前打印日志信息。装饰器函数中定义了一个内部函数wrapper,用于真正执行被装饰的函数。最后,将装饰器应用于add函数,当add函数被调用时,会自动打印日志信息。

3. 权限验证装饰器

def check_permission(func):
    def wrapper(user):
        if user == "admin":
            return func(user)
        else:
            raise ValueError("没有访问权限")
    return wrapper

@check_permission
def show_data(user):
    # 展示数据的逻辑
    pass

show_data("admin")

这个例子中,check_permission装饰器函数接收一个函数作为参数,并在该函数执行前进行权限验证。装饰器函数中定义了一个内部函数wrapper,用于真正执行被装饰的函数。最后,将装饰器应用于show_data函数,当show_data函数被调用时,会自动进行权限验证。

通过这些例子,可以看到装饰器的使用可以简化代码,提高代码的复用性。在实际开发中,可以根据需求定义适合的装饰器,方便地对函数进行功能扩展和定制。