Python装饰器:让你的代码更优雅
发布时间:2023-12-11 03:00:31
Python装饰器是一种函数,用于修改其他函数的功能。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。这使得装饰器可以在不修改原始函数的情况下,增加或修改其功能。
装饰器在Python中常用于以下场景:
1. 在不修改原始函数的情况下,增加额外的功能,如日志记录、性能分析等。
2. 在调用原始函数之前或之后执行一些操作,如权限检查、参数验证等。
3. 以某种方式修改原始函数的输出,如缓存结果、转换返回值等。
下面通过一个简单的例子来演示装饰器的使用。
import time
def timer(func):
def wrapper():
start = time.time()
func()
end = time.time()
print(f"函数执行时间:{end - start}秒")
return wrapper
# 被装饰函数
@timer
def hello():
time.sleep(1)
print("Hello, World!")
# 调用被装饰函数
hello()
在上面的例子中,我们定义了一个名为timer的装饰器函数。它接受一个函数作为输入,并返回一个新的函数wrapper。wrapper函数在调用原始函数之前记录了开始时间,在调用原始函数之后记录了结束时间,并打印出函数执行时间。
在hello函数定义之前加上@timer,相当于将hello函数作为参数传递给timer装饰器。这样,每当调用hello函数时,实际上会调用装饰器返回的wrapper函数。wrapper函数会在调用原始函数之前和之后执行额外的操作。
运行上述代码,输出如下:
Hello, World! 函数执行时间:1.0010101795196533秒
可以看到,通过装饰器函数,我们无需修改hello函数的定义,就能够在函数执行前后添加额外的功能。
除了上述示例中的计时功能,装饰器还可以用于日志记录、权限控制、缓存等场景。由于装饰器本身就是函数,因此可以在需要的地方使用,使代码更加简洁、优雅。
