当前位置: 首页 > 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.rkmt.cn/news/1365291.html

相关文章:

  • 如何轻松配置开源工具:3步实现WeMod高级功能解锁
  • 3步解决微信网页版访问限制:企业环境下的浏览器插件方案
  • BabelDOC:终极智能PDF翻译工具,完美保留格式布局的完整指南
  • 魔兽争霸3终极优化指南:5分钟免费解决画面拉伸与帧率限制问题
  • MALA框架:机器学习加速大规模材料电子结构计算实战与优化
  • WeChatExporter:告别数据焦虑,轻松备份你的微信聊天记忆
  • Windows环境下Poppler二进制包部署与深度应用指南
  • 告别分区恐惧:用GParted Live USB无损调整Ubuntu/Debian分区(附SSD优化建议)
  • 分期乐京东e卡高价回收:2026年最新攻略! - 团团收购物卡回收
  • Spectre与Meltdown漏洞:原理、影响与防护措施
  • Keil C51编译器版本迁移实战与优化指南
  • 揭秘分期乐京东e卡回收平台:快速变现的最佳选择 - 团团收购物卡回收
  • Docker .dockerignore 完全指南
  • MySQL 子查询优化:从慢查询到飞起的实战之路
  • MySQL JOIN 优化详解
  • MySQL 分库分表实战
  • SOCD Cleaner是什么?如何彻底解决游戏键盘方向冲突问题?
  • 实时控制系统中VoU传输优化框架的设计与实践
  • 大语言模型提示工程优化:精准解决机器翻译中的零代词恢复难题
  • UE5 Python蓝图节点重启失效的根源与精准注册方案
  • Frida Hook Java层还原Android客户端签名算法
  • GetQzonehistory:一键永久保存QQ空间说说的完整免费方案
  • 告别安装噩梦:手把手教你用Arcgis 10.2破解版搭建个人GIS学习环境(含Python 2.7配置与扩展模块开启)
  • 如何用ColorControl实现专业级显示管理:NVIDIA/AMD显卡调优与智能电视控制完全指南
  • SMUDebugTool深度解析:专业级AMD Ryzen硬件调试与性能调优工具
  • 使用C#代码实现将图片插入到Excel中
  • E7Helper第七史诗自动化助手:新手也能轻松上手的终极游戏解放方案
  • 基于非语义语音分析的AI心理健康热线优先级预测系统
  • Warcraft Helper终极指南:让魔兽争霸3在现代系统焕发新生
  • 终极免费方案:5分钟解锁Windows多用户远程桌面完整指南