引言

with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What's new in Python 2.6? 中 with 语句相关部分介绍)。with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

术语

要使用 with 语句,首先要明白上下文管理器这一概念。有了上下文管理器,with 语句才能工作。

下面是一组与上下文管理器和with 语句有关的概念。

上下文管理协议(Context Management Protocol):包含方法 __enter__() 和 __exit__(),支持

该协议的对象要实现这两个方法。

上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了

__enter__() 和 __exit__() 方法。上下文管理器定义执行 with 语句时要建立的运行时上下文,

负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器,

也可以通过直接调用其方法来使用。

运行时上下文(runtime context):由上下文管理器创建,通过上下文管理器的 __enter__() 和

__exit__() 方法实现,__enter__() 方法在语句体执行之前进入运行时上下文,__exit__() 在

语句体执行完后从运行时上下文退出。with 语句支持运行时上下文这一概念。

上下文表达式(Context Expression):with 语句中跟在关键字 with 之后的表达式,该表达式

要返回一个上下文管理器对象。

语句体(with-body):with 语句包裹起来的代码块,在执行语句体之前会调用上下文管

理器的 __enter__() 方法,执行完语句体之后会执行 __exit__() 方法。

格式

with open(path,操作方式,encoding='utf-8') as file:data = file.read()...# 进行文件的其他操作# 缩进取消,退出with语句块,表明文件操作结束,python自动关闭文件

特点

  1. with语句打开文件,并指示了一个语句块(即接下来有一个缩进的多行代码区域),该语句块内的代码是对文件的操作,当脱离该语句块时(即没有了缩进),则表示with语句块结束,接下来的代码不是对文件的操作代码
  2. 注意,当脱离with语句块的时候,即表示结束了文件的操作,这是python会自动调用close()关闭这个文件,此后不能再引用这个文件对象

优点

  1. 简单
  2. 自动管理文件对象,不需要调用close()
  3. 强的鲁棒性;当遭遇程序bug时导致本来应有的close()未能执行,如果使用with,python保证即使出现故障,也能保证文件被正确关闭

转载于:https://www.cnblogs.com/whu-2017/p/9086717.html

python中with语句的使用相关推荐

  1. python的用途实例-python中pass语句意义与作用(实例分析)

    想必大家都是刚刚才开始接触python这门语言的,今天这篇文章就来带大家来了解一下python这门语言之中常常会用到的一个语句pass语句.想必大家都很好奇python中pass作用是什么,接下来我就 ...

  2. python中if语句的实例_对python中if语句的真假判断实例详解

    说明 在python中,if作为条件语句,当if后面的条件参数为真时,则执行后面的语句块,反之跳过,为了深入理解if语句,我们需要知道if语句的真假判断方式. 示例 在python交互器中,经过测试发 ...

  3. 【Python】Python实战从入门到精通之三 -- 教你使用Python中条件语句

    本文是Python实战–从入门到精通系列的第三篇文章: Python实战从入门到精通第1讲–Python中的变量和数据类型 Python实战从入门到精通第2讲–Python中列表操作详解 Python ...

  4. python中for语句只有一种写法for in_pythonforin语句

    Python中有一种语句 for i in range 还有for i range这两个句子怎么用 - # python中只有for i in range()语法,没有for i range() # ...

  5. 【问题解决方案】关于Python中的语句 ‘ %matplotlib inline ‘

    [问题解决方案]关于Python中的语句 ' %matplotlib inline ' 参考文章: (1)[问题解决方案]关于Python中的语句 ' %matplotlib inline ' (2) ...

  6. [转载] python中的且语句_简单探讨python中的语句和语法

    参考链接: 在Python中解包:并行分配之外 python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了, ...

  7. python中pass语句的作用是什么_简述 Python 中 pass 语句的作用。

    [单选题]从总体中抽取的样本数据的频率分布直方图如图所示,若总体中85%的数据不超过b,则b的估计值为( ) [单选题]Graphically, competitive market supply i ...

  8. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  9. Python中 if 语句及其使用

    文章目录 前言 一. 条件测试 1.比较字符串相等或不相等 2.比较数字 3.检查多个条件 4.检查特定值是否在列表中 二.if 语句 1.简单的if语句 2. if-else 语句 3. if-el ...

  10. Python中for语句与else语句的结合使用

    在<Python中for语句的使用方法>中提到,for语句主要用于遍历容器中的元素:在<Python中if语句的使用方法>中提到,else语句可以与if语句结合使用表示两种可能 ...

最新文章

  1. 光源时间_背光源缩短寿命的原因
  2. 遗传算法与直接搜索工具箱学习笔记 -----从直接搜索算法开始
  3. 高并发-【抢红包案例】之三:使用乐观锁方式修复红包超发的bug
  4. 【如何利用idea提交本地代码到git远程仓库,史上最详细教程,建议收藏!】
  5. 使用Volley StringRequest Get的方式进行发票查询操作
  6. 根据大小分割大文本_场景文本检测—CTPN算法介绍
  7. 浏览器安全与MSAA
  8. 测地膨胀和膨胀重建—lhMorpRDilate
  9. 遮挡行人的检测论文合集
  10. WordPress资源站点推荐
  11. 【机器学习】集成算法使用样例
  12. 移动开发的那些事(上)
  13. Centos 5.8 搭建ntp服务器
  14. 阿里OSS通过WEB直传服务端验证设置回调自定义参数
  15. 物理专业英语词汇(H-N)
  16. SpringBooot:Redis:根据两地经纬度计算距离
  17. NewtonJson 的一个例子
  18. 【DNSPOD】利用DNSPod实现动态域名解析【DDNS】
  19. codeforces 418B. Cunning Gena (状态dp)
  20. 云计算学习网站都有哪些?学习云计算的方法

热门文章

  1. 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
  2. mac m1下golang连接mysql极速入门
  3. 一个链表创建、反转、打印的C语言代码
  4. LCA 最近公共祖先(RMQ、树上倍增、Tarjan),树上两点距离,线段重合长度
  5. layui登录页面写入数据_layui 页面保存数据
  6. 在Ubuntu中实验环境配置《操作系统原理与实践-李治军》
  7. Linux常见命令汇总(不定期更新)
  8. mongo在哪创建管理员_MongoDB添加用户
  9. instance of 泛型
  10. Hadoop基本流程与应用开发