Python with as 用法与原理

用法

首先我们来看一下python中不使用with语句如何操作文件,具体代码如下:

try:# 打开文件reader = open('text.txt','r')# 操作文件content = reader.read()print(content)
except Exception:print(Exception)
finally:# 关闭文件reader.close()

如果使用with as ,with 后面的open函数返回的是一个file对象,同时将它赋值给reader,在 with as 里面不需要关闭文件,python会自动关闭,具体代码如下:

with open('test.txt','r') as reader:content = reader.read()print(content)

原理

with as 结构主要的原理是使用了上下文管理器。通过上下文管理器,python知道我们打开了一个文件,并且在操作完成之后会自动把它关闭。接下来我们自己实现一个上下文管理器的类

class FileManager(object):def __init__(self,name,mode):print("调用了__init__方法")self.name = nameself.mode = modeself.file = Nonedef __enter__(self):print("调用了__enter__方法")self.file = open(self.name, self.mode)return self.filedef __exit__(self, exc_type, exc_val, exc_tb):print("调用了__exit__方法")if self.file:self.file.close()with FileManager('test.txt','r') as reader:print("准备读取文件")content = file.read()

输出结果如下:

调用了__init__方法
调用了__enter__方法
准备读取文件
文件内容
调用了__exit__方法

通过上面的程序我们可以看到:

  • 首先,python在实例化类的时候调用了__init__方法
  • 接下来在执行with语句时它会自动调用这个类的 __enter__ 方法
  • __enter__ 方法执行完后才会执行 with 下面的语句块,即准备读取文件、读取文件
  • 最后,调用__exit__ 方法关闭文件。

所以,如果一个类文件中包含__enter__ 方法和 __exit__ 方法,这个类就可以当作上下文管理器的类,使用 with 执行这个语句的时候会自动调用 __enter__ 方法,然后执行 with 下面的语句,最后执行 __exit__ 方法,这就是上下文管理器的特点。

Python with as 用法与原理相关推荐

  1. Python 中 with用法及原理

    前言 with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的"清理"操作,释放资源,比如文件使用后自动关闭/线程中锁的自动获取和释放等. 问题引出 ...

  2. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  3. Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  4. python解析原理_Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  5. python能做什么m_Python -m命令是什么意思?这里有它的典型用法以及原理解析

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  6. python中的super用法详解_python super用法及原理详解

    这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 super作为python的内建函数. ...

  7. python func函数用法_python函数局部变量用法实例分析

    本文实例讲述了python函数局部变量用法.分享给大家供大家参考.具体分析如下: 当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的.这 ...

  8. Sklearn中predict_proba函数用法及原理详解

    Sklearn中predict_proba函数用法及原理详解(以logistic回归为例) 网上对predict_proba的数学原理解释的太少了,也不明确,特意总结一下,并给出有些不能用该方法的原因 ...

  9. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

最新文章

  1. 论文:Insights on Transfer Optimization: Because Experience is the Best Teacher(1)文章结构以及以及自己的感觉
  2. 从RNN一步步通俗易懂T理解LSTM
  3. mysql图片路径varchar大小_Mysqlvarchar大小长度问题_MySQL
  4. IOS开发之下拉刷新和上拉加载更多
  5. 计算机专业需要转正定级吗,全日制本科考进事业单位,没有取得初级资格职称,转正后能直接聘用为专业技术十二级岗位吗?...
  6. mysql导入竖杠分割的数据_MYSQL :逗号分隔串表,分解成竖表
  7. java学习--基础知识进阶第五天--API、 Object类 System类、日期相关类、包装类正则表达式...
  8. 判断某个字符串是否是数字(简单方法)
  9. Linux和Win文件互传及vim的使用
  10. Unity 怎么把app改成中文名
  11. window远程桌面连接实现连接他人电脑=》mstsc
  12. 模拟电子技术基础简明课程(第三版)思维导图
  13. 【华为HCIE考试卷在哪买?】
  14. springboot如何访问html页面,Springboot访问html页面的教程详解
  15. Intellij IDEA 提示cannot find declaration to go to 解决方法
  16. vue使用v-print-nb插件实现A4纸张排版打印
  17. 人生遐思:所谓的人生到底是什么呢
  18. 依据sh_goods的结构与数据,在mydb数据库中创建一张tm_goods表,并将价格在20到50之间的商品价格减5元,库存量再新增300件。
  19. matlab线性代数(diag)
  20. 如何使用CocoaPods?

热门文章

  1. TensorBoard:嵌入可视化
  2. 高级语言程序设计II 实验报告三c++使用文本文件和二进制文件的读写比较两者的区别和优劣...
  3. PostgreSQL初学
  4. J2EE之初识JSP
  5. linux mysql库文件路径设置_MySQL_linux修改mysql数据库文件的路径,mysql更改数据文件的存放路径 - phpStudy...
  6. 安卓开发大作业_罗湖小程序开发制作价格低
  7. 【github系列】github上传空目录
  8. unity 加载完场景继续加载场景中的物体_Unity光照渲染原理
  9. usb模拟串口_USB不被电脑识别,按F8有用吗?这篇文章告诉你
  10. Git--rebase合并提交