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生成指定长度的随机数密码
Jan 23 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
Python通用循环的构造方法实例分析
Dec 19 Python
浅谈Python中的继承
Jun 19 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
Python requests上传文件实现步骤
Sep 15 Python
Python如何使用vars返回对象的属性列表
Oct 17 Python
一行Python命令实现批量加水印
Apr 07 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
php检测useragent版本示例
2014/03/24 PHP
Symfony控制层深入详解
2016/03/17 PHP
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
Python中bisect的用法
2014/09/23 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python字典对象实现原理详解
2019/07/01 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
《中彩那天》教学反思
2014/02/22 职场文书
二年级小学生评语
2014/04/21 职场文书
环保倡议书格式范文
2014/05/14 职场文书
2014年测量员工作总结
2014/12/12 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android