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的发展历程中不断进化,具有丰富的应用场景。通过掌握和使用装饰器,可以提高代码的可复用性和扩展性。