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

Python中的装饰器函数及其应用案例

发布时间:2023-10-09 01:19:14

装饰器函数是Python中非常有用的一种函数,在Python中,装饰器函数本质上是一个函数,它可以用来修改、增强其他函数的功能。装饰器函数通常接受一个函数作为参数,并返回一个新的函数。这个新的函数通常会在原函数的基础上做一些额外的操作,比如添加功能、修改参数等。

装饰器函数的用途非常广泛,下面我们来介绍一些常见的应用案例。

1. 计时器

装饰器函数可以用来给函数添加计时功能,用于统计函数的执行时间。比如我们可以定义一个计时器装饰器函数:

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()    #记录开始时间
        result = func(*args, **kwargs)   #执行函数
        end = time.time()    #记录结束时间
        print(f'函数 {func.__name__} 的执行时间为:{end - start} 秒')
        return result
    return wrapper

使用装饰器来计时:

@timer
def my_func():
    time.sleep(1)
    print('Hello, world!')

my_func()

运行结果:

Hello, world!
函数 my_func 的执行时间为:1.000356912612915 秒

2. 权限验证

装饰器函数也可以用来做权限验证,比如限制只有管理员才能访问某些函数。我们可以定义一个权限验证的装饰器函数:

def admin_required(func):
    def wrapper(*args, **kwargs):
        if is_admin():
            return func(*args, **kwargs)
        else:
            return '权限不足,无法访问该函数'
    return wrapper

使用装饰器来限制权限:

@admin_required
def my_func():
    print('Hello, admin!')

my_func()

运行结果:

Hello, admin!

3. 缓存功能

装饰器函数还可以用来实现缓存功能,提高函数的执行效率。比如我们可以定义一个缓存装饰器函数:

def cache(func):
    result = {}
    def wrapper(*args, **kwargs):
        if args in result:
            return result[args]
        else:
            result[args] = func(*args, **kwargs)
            return result[args]
    return wrapper

使用装饰器来实现缓存功能:

@cache
def fib(n):
    if n < 2:
        return n
    else:
        return fib(n-1) + fib(n-2)

使用斐波那契数列的例子来测试缓存功能:

print(fib(10))
print(fib(20))
print(fib(10))

运行结果:

55
6765
55

以上是几个常见的装饰器函数的应用案例,装饰器函数非常实用,可以方便地对已有函数进行增强和修改。不过在使用装饰器函数时要注意,一定要保持装饰器函数的原函数的签名不变,以确保装饰器函数可以正确的工作。