Python装饰器及应用场景
发布时间:2023-06-17 00:35:03
一、什么是Python装饰器
Python装饰器是一个能够修改其他函数的功能的函数。它们是最有力的Python工具之一,使得程序员可以创建优美而健壮的代码。装饰器在不改变原函数的前提下,可增强其功能或者改变其行为。
二、Python装饰器的示例
下面是Python装饰器的示例:
def decorator(func):
def decorated():
print("Before the function is called.")
func()
print("After the function is called.")
return decorated
@decorator
def main_function():
print("I'm a function!")
main_function()
该示例中,“decorator”函数是一个装饰器,使用@符号将其应用于“main_function”函数中。当“main_function”被调用时,将先执行“decorator”函数,“decorated”函数中再去执行真正的函数“main_function”。
三、Python装饰器的应用场景
1.打印日志
在函数调用前后打印出“函数开始执行”和“函数执行结束”的日志:
def log(func):
def wrapper(*args, **kwargs):
print("函数开始执行")
func(*args, **kwargs)
print("函数执行结束")
return wrapper
@log
def add(a, b):
print("%d + %d = %d" % (a, b, a+b))
add(1, 2)
2.身份认证
在函数调用前,对用户进行身份验证:
def authenticate(func):
def wrapper(*args, **kwargs):
if check_user_auth():
func(*args, **kwargs)
else:
raise Exception("请先登录")
return wrapper
@authenticate
def add(a, b):
print("%d + %d = %d" % (a, b, a+b))
add(1, 2)
3.缓存
在函数被调用时,将其返回的结果缓存下来,避免重复计算:
from functools import lru_cache
@lru_cache(maxsize=128)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(6))
4.计时器
统计函数执行时间:
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
print("函数执行时间:%.2f秒" % (end_time - start_time))
return wrapper
@timer
def sleep_3_seconds():
print("开始睡眠3秒")
time.sleep(3)
print("结束睡眠")
sleep_3_seconds()
四、总结
Python装饰器可以使代码更加优美而健壮,它具有灵活可扩展的特性,并且可以应用于各个场景,如日志打印、身份验证、缓存、计时器等,使程序的开发与维护更加方便和简单。
