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入门者的一些编程建议
Jun 15 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
python实现域名系统(DNS)正向查询的方法
Apr 19 Python
Python 字符串大小写转换的简单实例
Jan 21 Python
python添加模块搜索路径方法
Sep 11 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
python检测IP地址变化并触发事件
Dec 26 Python
Django之模型层多表操作的实现
Jan 08 Python
学习python可以干什么
Feb 26 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
Python读写文件基础知识点
Jun 10 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
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
js控制frameSet示例
2013/09/10 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
python字符串连接方式汇总
2014/08/21 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
python语音识别实践之百度语音API
2018/08/30 Python
pandas通过loc生成新的列方法
2018/11/28 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
火车的故事教学反思
2014/02/11 职场文书
捐赠仪式主持词
2014/03/19 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
毕业典礼邀请函
2015/01/31 职场文书
学生犯错保证书
2015/05/09 职场文书
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js