当前位置: 首页 > news >正文

[智能体-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 语法自动关闭异常也释放简洁安全

口诀缩进内做事,出块自动关,异常不泄漏,资源更稳妥。

http://www.jsqmd.com/news/876257/

相关文章:

  • DLSS Swapper终极指南:免费高效的游戏DLSS智能管理解决方案
  • AMD Ryzen SMU Debug Tool深度解析:硬件级系统管理单元调试实战指南
  • 辐射输运数据降维:δ变换与立方根变换在PCA预处理中的误差对比
  • SOCD Cleaner是什么?如何彻底解决游戏键盘方向冲突问题?
  • Wand-Enhancer终极指南:三步免费解锁WeMod Pro高级功能完整教程
  • 让工具优先于模型:把可验证动作放在推理之前
  • 告别命令行恐惧!在CentOS 7.9虚拟机GNOME桌面下,用GParted图形化搞定磁盘分区与挂载
  • 终极解决方案:用sguard_limit彻底解决腾讯游戏ACE-Guard卡顿问题
  • 终极Zotero中文文献解决方案:茉莉花插件完全指南
  • 中兴光猫逆向工程:从串口调试到配置解密的完整实践
  • 量化模型误差相关性:从算法同源到基础模型遗传的风险测量
  • MySQL 分库分表实战
  • MALA框架:机器学习加速大规模材料电子结构计算实战与优化
  • 医疗文本数据噪声对模型性能的影响:从错误率量化到模型选型实战
  • Frida Swift动态分析实战:突破iOS限制的可观测性方案
  • 小红书数据采集实战指南:Python自动化工具快速上手
  • OpenLDAP密码修改原理与实战:EXOP协议、ACL权限与ppolicy策略
  • Warcraft Helper终极指南:让魔兽争霸3在现代系统焕发新生
  • LLM在芯片设计优化中的应用与ORFS-agent创新架构
  • 分期乐京东e卡高价回收:2026年最新攻略! - 团团收购物卡回收
  • MySQL JOIN 优化详解
  • Frida Hook Java层还原Android客户端签名算法
  • Spectre与Meltdown漏洞:原理、影响与防护措施
  • Mermaid Live Editor:为什么每个开发者都需要这个实时图表编辑神器?
  • 分期乐京东e卡回收安全吗?三分钟了解回收全流程 - 团团收购物卡回收
  • 2026年亲测必备:10个论文降AI工具,免费将AI率降至5%以下(附避坑教程) - 降AI实验室
  • E7Helper第七史诗自动化助手:新手也能轻松上手的终极游戏解放方案
  • MySQL 子查询优化:从慢查询到飞起的实战之路
  • 长沙手表变现不被坑的密码,合扬本地老店实测封神 - 李宏哲1
  • PotPlayer字幕翻译插件:5分钟实现外语影视无障碍观看的终极免费方案