[智能体-34]:python的with语法,详解,代码对比
一、核心作用
自动申请资源、释放资源,代码块结束无论正常退出、报错中断,都会自动关闭资源,避免内存 / 句柄泄漏。常用场景:文件、网络连接、数据库、锁、Streamlit 容器。
二、基础语法格式
python
运行
with 上下文对象 as 别名: 缩进内业务代码 # 代码块结束,自动执行关闭释放三、原理
底层依赖上下文管理器协议
- 进入代码块:自动调用
__enter__() - 离开代码块:自动调用
__exit__()异常也会触发关闭,安全性远高于手动 close
四、经典对比:文件读写(最常用)
1. 传统写法(手动开关,易出错)
python
运行
# 手动打开 f = open("demo.txt", "r", encoding="utf-8") content = f.read() print(content) # 必须手动关闭,忘了就资源泄露 f.close()缺点:报错中断时,close()不会执行,文件一直占用。
2. with 写法(自动关闭,推荐)
python
运行
with open("demo.txt", "r", encoding="utf-8") as f: content = f.read() print(content) # 出缩进自动关闭,无需手动写close五、异常场景对比
传统写法(报错不关闭)
python
运行
f = open("demo.txt", "r") 1 / 0 # 触发报错,程序终止 f.close() # 永远执行不到,文件无法关闭with 写法(报错依旧自动关闭)
python
运行
with open("demo.txt", "r") as f: 1 / 0 # 哪怕报错退出,文件依然自动关闭六、Streamlit 中 with 实战对比
不用 with,写法啰嗦
python
运行
msg_box = st.chat_message("assistant") msg_box.write("AI回复内容")标准 with 写法(简洁规范)
python
运行
with st.chat_message("assistant"): st.write("AI回复内容")其他常用 with 容器
python
运行
# 加载动画 with st.spinner("思考中"): pass # 分栏布局 col1, col2 = st.columns(2) with col1: st.write("左栏") with col2: st.write("右栏")七、自定义上下文管理器(理解本质)
python
运行
class MyContext: def __enter__(self): print("进入代码块,打开资源") return self def __exit__(self, exc_type, exc_val, exc_tb): print("退出代码块,关闭资源") # 使用 with MyContext(): print("正在执行业务逻辑")运行输出:
plaintext
进入代码块,打开资源 正在执行业务逻辑 退出代码块,关闭资源八、总结区别
| 方式 | 资源关闭 | 异常处理 | 代码简洁度 |
|---|---|---|---|
| 手动 open+close | 需手动调用 | 报错易泄露 | 繁琐 |
| with 语法 | 自动关闭 | 异常也释放 | 简洁安全 |
口诀缩进内做事,出块自动关,异常不泄漏,资源更稳妥。
