这是一个相对比较好理解的用法.

有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。

一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。

with-as表达式极大的简化了每次写finally的工作.

在对文件操作时候用的最多,  可以写成以下非常简洁的方式.  重要的是, 你不需要去考虑什么时候fclose的问题.

with open("/tmp/foo.txt") as file:data = file.read()

需要注意的是,  代码优雅的背后一定是已经做了些什么.  从这个例子中,  表面上看不出来的任何玄机, 但是在open文件的时候, 已经完成了类似enter和finally的工作.

实际中着两个函数是__enter__ ,  __exit__ .

在实际的运行过程中,python会首先运行__enter__里的代码,返回self,作为as 后面的变量值,

然后再运行with模块中的代码,最后会自动执行exit中的代码,而不管with中的代码运行结果如何。

这也就是with能简化try-finally语句的原因。

所以with通常用在读取文件的操作中,将文件句柄的关闭操作放在exit方法中,这样就不会因忘记释放文件句柄而产生可能出现的错误。

另外,exit()方法的返回值可以用来指示with部分的代码出现的异常是否需要raise,如果返回false,则会raise,否则,不进行任何操作。

还有一个需要注意的地方, 就是 with ... as ... : 之后的函数, 是属于的外围对象的, 和紧跟with的函数没有必然的关系.

参考:

http://blog.kissdata.com/2014/05/23/python-with.html

http://effbot.org/zone/python-with-statement.htm

http://www.cnblogs.com/Brogrammer/archive/2012/07/23/2605570.html

转载于:https://www.cnblogs.com/qingyuanjushi/p/5985551.html

最新文章

  1. python笔试编程题_python_编程面试题
  2. [转载] 陈皓:一些重要的算法
  3. C++ 对象和实例的区别,以及用new和不用new创建类对象区别
  4. win8, VS2013 .NET 4.5在哪找svcutil.exe?
  5. 不小心执行 rm -f,该如何恢复?
  6. 深度揭秘Twitter的新一代流处理引擎Heron
  7. zabbix监控部署 与添加主机
  8. 认识Spring核心容器IoC/DI
  9. D3、EChart、HighChart绘图demol
  10. Pandas入门教程(一)
  11. [转载] python中callable_Python callable() 函数
  12. VS2017编译libcef 2623_20181107完成
  13. 计算机系微电子专业大学排名,微电子专业大学排名情况一览表
  14. excel操作记录——条形图
  15. 服务器虚拟机光驱,vSphere client中的光驱配置方式
  16. java 雷达图_Android雷达图(蜘蛛网图),自定义view之雷达图,正五边雷达图,分数图...
  17. 手动编译源代码安装GR GSM
  18. 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路
  19. 爱好-文化-冢-象冢:《最后一头战象》沈石溪
  20. 《空气动力学基础》——第三章 无黏不可压缩流动基础

热门文章

  1. CSS3下的渐变文字效果实现
  2. 你不知道的那些console
  3. node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块
  4. Practice - iOS 项目持续集成实践(一)
  5. 【原创】brew 和 brew cask
  6. 移动开发之设计稿转换页面单位尺寸
  7. Oracle EBS-SQL (PO-5):采购订单控制信息查询.sql
  8. JavaScript嵌套函数this的指向问题
  9. 怎样在SQL Server上部署SSIS包 2
  10. 菜鸟编译OPenJDK全过程记录