python中装饰器的应用

装饰器(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中的常见应用场景。装饰器提供了一种灵活的方式来修改或增强函数的行为,使得代码更加模块化和可维护。在实际开发中,你还可以组合多个装饰器,以便在同一个函数上应用多个功能。

你可能感兴趣的:(Python,python,开发语言)