什么是闭包?
先给一个简单的定义:
闭包是嵌套函数的一种特殊形式,满足两个核心条件:
- 内层函数引用了外层函数的变量(而非全局变量);
- 外层函数返回了内层函数(而非执行内层函数)。
闭包的核心价值是:保留外层函数的变量环境,即使外层函数执行完毕,内层函数依然能访问到这些变量。
简单示例
python
def outer():
print("这是外部函数")
username = "zhangsan" #局部变量
def inner():
print("这是内部函数")
print("username:", username)
return inner
res = outer()
res() #inner()
#运行结果
这是外部函数
这是内部函数
username: zhangsan
闭包的核心应用
Python 装饰器本质就是闭包,比如实现一个 "计算函数执行时间" 的装饰器:
python
import time
def timer_decorator(func):
# 外层函数接收被装饰的函数
def wrapper(*args, **kwargs):
# 内层函数封装额外逻辑
start = time.time()
result = func(*args, **kwargs) # 执行原函数
end = time.time()
print(f"函数 {func.__name__} 执行耗时:{end - start:.4f} 秒")
return result
return wrapper
# 使用装饰器
@timer_decorator
def test_func():
time.sleep(0.5)
test_func() # 输出:函数 test_func 执行耗时:0.5001 秒
