Python中的闭包

什么是闭包?

先给一个简单的定义:

闭包是嵌套函数的一种特殊形式,满足两个核心条件:

  1. 内层函数引用了外层函数的变量(而非全局变量);
  2. 外层函数返回了内层函数(而非执行内层函数)。

闭包的核心价值是:保留外层函数的变量环境,即使外层函数执行完毕,内层函数依然能访问到这些变量。

简单示例

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 秒
相关推荐
m0_738098024 分钟前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
好家伙VCC6 分钟前
# 发散创新:用 Rust构建高性能游戏日系统,从零实现事件驱动架构 在现代游戏开发中,**性能与可扩展性**是核心命题。传统基于
java·python·游戏·架构·rust
该怎么办呢12 分钟前
Source/Core/DeveloperError.js
开发语言·javascript·ecmascript
小璐资源网14 分钟前
Java 21 新特性实战:虚拟线程详解
java·开发语言·python
m0_5698814724 分钟前
基于C++的数据库连接池
开发语言·c++·算法
.select.30 分钟前
c++ auto
开发语言·c++·算法
2301_8194143032 分钟前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
WZTTMoon34 分钟前
从互斥锁到无锁,Java 20年并发安全进化史
java·python·安全
2401_8845632434 分钟前
C++中的访问者模式高级应用
开发语言·c++·算法