python中装饰器的应用

发布时间:2023年12月21日

装饰器(Decorator)是一种用于修改或增强函数行为的技术。在Python中,装饰器是函数或类,它可以接受一个函数作为输入,并返回一个新的函数,通常在新函数中对原函数进行一些额外的操作。以下是一些常见的装饰器应用场景:

日志记录:


def log_decorator(func):
? ? def wrapper(*args, **kwargs):
? ? ? ? print(f"Calling function {func.__name__} with arguments {args}, {kwargs}")
? ? ? ? result = func(*args, **kwargs)
? ? ? ? print(f"Function {func.__name__} returned {result}")
? ? ? ? return result
? ? return wrapper

@log_decorator
def add(a, b):
? ? return a + b

add(2, 3)
性能分析:


import time

def timing_decorator(func):
? ? def wrapper(*args, **kwargs):
? ? ? ? start_time = time.time()
? ? ? ? result = func(*args, **kwargs)
? ? ? ? end_time = time.time()
? ? ? ? print(f"Function {func.__name__} took {end_time - start_time} seconds")
? ? ? ? return result
? ? return wrapper

@timing_decorator
def slow_function():
? ? time.sleep(2)
? ? print("Function executed")

slow_function()
缓存结果:


def cache_decorator(func):
? ? cache = {}

? ? def wrapper(*args):
? ? ? ? if args in cache:
? ? ? ? ? ? print(f"Using cached result for {func.__name__}{args}")
? ? ? ? ? ? return cache[args]
? ? ? ? else:
? ? ? ? ? ? result = func(*args)
? ? ? ? ? ? cache[args] = result
? ? ? ? ? ? print(f"Caching result for {func.__name__}{args}")
? ? ? ? ? ? return result
? ? return wrapper

@cache_decorator
def expensive_calculation(x, y):
? ? time.sleep(2)
? ? return x + y

print(expensive_calculation(2, 3))
print(expensive_calculation(2, 3)) ?# 使用缓存的结果
身份验证:


def authenticate_decorator(func):
? ? def wrapper(*args, **kwargs):
? ? ? ? # 检查身份验证逻辑
? ? ? ? if is_authenticated():
? ? ? ? ? ? return func(*args, **kwargs)
? ? ? ? else:
? ? ? ? ? ? raise PermissionError("Authentication failed")
? ? return wrapper

@authenticate_decorator
def secure_function():
? ? print("This function requires authentication")

secure_function()
请求处理:


from flask import Flask

app = Flask(__name__)

def route_decorator(func):
? ? def wrapper():
? ? ? ? # 处理请求逻辑
? ? ? ? result = func()
? ? ? ? return f"Result: {result}"
? ? return wrapper

@app.route('/')
@route_decorator
def home():
? ? return "Hello, World!"

if __name__ == '__main__':
? ? app.run()
这些是一些装饰器在Python中的常见应用场景。装饰器提供了一种灵活的方式来修改或增强函数的行为,使得代码更加模块化和可维护。在实际开发中,你还可以组合多个装饰器,以便在同一个函数上应用多个功能。

文章来源:https://blog.csdn.net/Syasjy/article/details/135112505
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。