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

Python with 关键字语法糖

参考文章:

Python with 关键字 | 菜鸟教程 (runoob.com)icon-default.png?t=O83Ahttps://www.runoob.com/python3/python-with.html

Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。

with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。

file = open('./test_runoob.txt', 'w')
file.write('hello world !')
file.close()

以上代码如果在调用 write 的过程中,出现了异常, close 方法将无法被执行,因此资源就会一直被该程序占用而无法被释放。 接下来我们呢可以使用 try…except…finally 来改进代码:

file = open('./test_runoob.txt', 'w')
try:file.write('hello world')
finally:file.close()

以上代码我们对可能发生异常的代码处进行 try 捕获,发生异常时执行 except 代码块,finally 代码块是无论什么情况都会执行,所以文件会被关闭,不会因为执行异常而占用资源。

但是这样的方式都太麻烦了,我们有with

使用 with 关键字:

with open('./test_runoob.txt', 'w') as f:f.write('hello world !')

使用 with 关键字系统会自动调用 f.close() 方法, with 的作用等效于 try/finally 语句是一样的。

我们可以在执行 with 关键字后检验文件是否关闭:

>>> with open('./test_runoob.txt') as f:
...     read_data = f.read()>>> # 查看文件是否关闭
>>> f.closed
True

with 语句实现原理建立在上下文管理器之上。

上下文管理器是一个实现 __enter__ 和 __exit__ 方法的类。

使用 with 语句确保在嵌套块的末尾调用 __exit__ 方法。

这个概念类似于 try...finally 块的使用。

with open('./test_runoob.txt', 'w') as f:f.write('hello world!')

以上实例将 hello world! 写到 ./test_runoob.txt 文件上。

在文件对象中定义了 __enter__ 和 __exit__ 方法,即文件对象也实现了上下文管理器

首先调用 __enter__ 方法

然后执行 with 语句中的代码

最后调用 __exit__ 方法。

即使出现错误,也会调用 __exit__ 方法,也就是会关闭文件流


http://www.mrgr.cn/news/26267.html

相关文章:

  • python基础知识(四)--if语句,for\while循环
  • 梧桐数据库(WuTongDB):数据库技术中都有哪些常见的优化器
  • 揭秘区块链的未来加速器:Layer 2技术深度剖析
  • 清华港大开源,如何通过深度置信图提升3D重建的精度和速度?
  • 软件测试 | APP测试 —— Appium 的环境搭建及工具安装教程
  • DAY58拓扑排序
  • 阿里云服务器 篇八:图片展示和分享网站(纯静态,数据信息和展示页面分离)
  • 【IPV6从入门到起飞】5-2 IPV6+Home Assistant(ESP32+MQTT+DHT11+BH1750)传感器采集上传监测
  • 鸿蒙读书笔记1:《鸿蒙操作系统设计原理与架构》
  • “百度热搜”揭示月饼遇冷背后:如何在经济下行中理性消费 + 应对风险?
  • yarn运行机制原理
  • 关于 Camera Tuning 岗位的一些认识和看法
  • 深入理解线程互斥锁
  • 音视频入门基础:AAC专题(1)——AAC官方文档下载
  • C盘空间不足如何解决?解决C盘空间不足的7个方法
  • 【聊聊AI编程必不可少的NLTK及其punkt、punkt_tab安装】
  • 双线性插值概念及MATLAB实现
  • C#基础知识-.NET,变量,容量单位,数据类型
  • 总结拓展九:SAP数据迁移(2)
  • Java项目: 基于SpringBoot+mybatis+maven旅游管理系统(含源码+数据库+毕业论文)