Python装饰器函数——装饰器函数的概念和实例应用
发布时间:2023-05-27 20:18:39
1. 装饰器函数的概念
装饰器函数是指一个可以接收一个函数作为参数,并返回一个新函数的函数。在Python中,装饰器函数通常用于对已有的代码进行修改或添加新的功能,在代码执行原有功能的同时,还实现了额外的功能。以此实现代码的复用性、灵活性和可维护性。
装饰器函数通常被应用在以下几个场景:
1. 计算函数执行时间、打印函数执行日志;
2. 对函数的参数进行验证、处理;
3. 缓存函数的执行结果;
4. 对函数进行授权、权限验证。
2. 装饰器函数的实例应用
下面我们来看几个具体的装饰器函数的实例应用。
2.1 计算函数执行时间
我们可以定义一个装饰器函数计算函数的执行时间,如下所示:
import time
def time_it(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f'{func.__name__} took {end_time - start_time:.2f} seconds to execute.')
return result
return wrapper
@time_it
def some_function(some_arg):
time.sleep(2)
return f'Result: {some_arg}'
result = some_function('Hello, world!')
print(result)
该装饰器函数在计算函数执行时间的同时,还保留了函数原有的功能。
2.2 缓存函数的执行结果
我们可以定义一个装饰器函数对函数的执行结果进行缓存,以此加快函数的执行速度,如下所示:
cache = {}
def memoize(func):
def wrapper(*args):
if args in cache:
print(f'Found result for {args} in cache.')
return cache[args]
else:
result = func(*args)
cache[args] = result
return result
return wrapper
@memoize
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10))
该装饰器函数将函数的执行结果存储到一个字典中,以便在下次执行函数时,直接从缓存中获取结果。
2.3 授权函数的执行权限
我们可以定义一个装饰器函数对函数的执行权限进行授权验证,如下所示:
def authenticated(func):
def wrapper(*args, **kwargs):
username = input('Enter your username: ')
password = input('Enter your password: ')
if username == 'admin' and password == '123456':
return func(*args, **kwargs)
else:
raise Exception('Invalid username or password')
return wrapper
@authenticated
def some_function():
print('You have been granted access.')
some_function()
该装饰器函数在执行函数之前,会验证用户的用户名和密码,只有验证通过的用户才能执行该函数。
3. 总结
装饰器函数是Python中一个非常有用的工具,它可以帮助我们实现代码的复用性、灵活性和可维护性。在实际应用中,我们可以根据具体需求定义不同的装饰器函数,以实现不同的功能。
