装饰器
当我们谈论装饰器时,我们实际上是在谈论一种特殊的语法和设计模式,用于修改或扩展函数的行为,而无需修改函数的定义。
装饰器是一个函数,它接受一个函数作为参数,并返回一个新的函数。这个新的函数通常会在传入的函数之前或之后执行一些额外的操作,或者对传入的函数进行修改。
装饰器的作用是将一些公共的功能逻辑与多个函数进行解耦,从而可以在不修改函数定义的情况下,通过装饰器来添加、修改或扩展函数的行为。
在 Python 中,装饰器使用 @
符号来应用。当一个函数被装饰器装饰时,它的行为将被装饰器所定义的逻辑所取代。
下面是一个简单的装饰器示例,用于在函数执行前后打印日志信息:
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Calling function: {func.__name__}")
result = func(*args, **kwargs)
print(f"Function {func.__name__} completed")
return result
return wrapper
@log_decorator
def add_numbers(a, b):
return a + b
result = add_numbers(2, 3)
print(result)
在上面的例子中,log_decorator
是一个装饰器函数。它接受一个函数作为参数,然后定义了一个内部函数 wrapper
,它在调用传入的函数之前和之后打印日志信息。最后,装饰器返回了 wrapper
函数。
通过将 @log_decorator
放在 add_numbers
函数的定义之前,我们将 add_numbers
函数应用了 log_decorator
装饰器。当我们调用 add_numbers
函数时,实际上是调用了装饰器返回的 wrapper
函数,从而实现了在函数执行前后打印日志的功能。
装饰器提供了一种简洁而灵活的方式来修改函数的行为,使代码更加可维护和可重用。在 Flask 中,装饰器广泛应用于定义路由、请求前后的操作、身份验证和权限控制等方面,以实现功能的扩展和定制。