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 秒
相关推荐
Java后端的Ai之路6 小时前
【Python 教程15】-Python和Web
python
冬奇Lab7 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
灰子学技术9 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰9 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码9 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚9 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂10 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas13610 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐10 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
前端摸鱼匠10 小时前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测