在深入装饰器的世界之前,我们首先要掌握一个重要基础概念——闭包(Closure)。理解闭包能够帮助我们更好地理解装饰器的实现原理和优势。
一、什么是闭包?
闭包是指在一个函数(外函数)内部定义另一个函数(内函数),并让内函数引用外函数中的变量,然后将这个内函数作为返回值返回。即使外函数已经执行结束,内函数仍能访问这些变量,从而形成>“闭包”<。
示例:
def make_greeting(name):
greeting = f"Hello, {name}"
def greet():
print(greeting) # 内函数引用了外函数的变量
return greet # 返回内函数,形成闭包
hello_alice = make_greeting("Alice")
hello_alice() # 输出:Hello, Alice
如上所示,greet()
即使在外函数作用域消失后依然可以访问 greeting
。这种将状态“封闭”在函数内部并保存的一种机制,使得闭包成为一种强大的状态管理工具。