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