Python中的with...as用法介绍


Posted in Python onMay 28, 2015

这个语法是用来代替传统的try...finally语法的。

with EXPRESSION [ as VARIABLE] WITH-BLOCK

基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。

紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

file = open("/tmp/foo.txt")

try:

    data = file.read()

finally:

    file.close()

使用with...as...的方式替换,修改后的代码是:
with open("/tmp/foo.txt") as file:

    data = file.read()

#!/usr/bin/env python

# with_example01.py

 

 

class Sample:

    def __enter__(self):

        print "In __enter__()"

        return "Foo"

 

    def __exit__(self, type, value, trace):

        print "In __exit__()"

 

 

def get_sample():

    return Sample()

 

 

with get_sample() as sample:

    print "sample:", sample

执行结果为
In __enter__()

sample: Foo

In __exit__()

1. __enter__()方法被执行
2. __enter__()方法返回的值 - 这个例子中是"Foo",赋值给变量'sample'
3. 执行代码块,打印变量"sample"的值为 "Foo"
4. __exit__()方法被调用with真正强大之处是它可以处理异常。可能你已经注意到Sample类的__exit__方法有三个参数- val, type 和 trace。这些参数在异常处理中相当有用。我们来改一下代码,看看具体如何工作的。

Python 相关文章推荐
python使用循环实现批量创建文件夹示例
Mar 25 Python
python实现感知器
Dec 19 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
python中使用print输出中文的方法
Jul 16 Python
python学生信息管理系统(完整版)
Apr 05 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
Python爬取科目四考试题库的方法实现
Mar 30 Python
python关键字and和or用法实例
May 28 #Python
Python yield 使用浅析
May 28 #Python
Python中super的用法实例
May 28 #Python
Python中的super用法详解
May 28 #Python
Python读写ini文件的方法
May 28 #Python
Python实现给文件添加内容及得到文件信息的方法
May 28 #Python
Python功能键的读取方法
May 28 #Python
You might like
资料注册后发信小技巧
2006/10/09 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
JSON语法五大要素图文介绍
2012/12/04 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
python列出目录下指定文件与子目录的方法
2015/07/03 Python
python生成器表达式和列表解析
2016/03/10 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
德国电子商城:ComputerUniverse
2017/04/21 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
腾讯广告词
2014/03/19 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
小学老师对学生的评语
2014/12/29 职场文书
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL