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 del()函数用法
Mar 24 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
深入理解Python分布式爬虫原理
Nov 23 Python
python读取中文txt文本的方法
Apr 12 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
Python requests用法和django后台处理详解
Mar 19 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php单件模式结合命令链模式使用说明
2008/09/07 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php实现的RSS生成类实例
2015/04/23 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
Python简单实现Base64编码和解码的方法
2017/04/29 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
python得到电脑的开机时间方法
2018/10/15 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
安装docker-compose的两种最简方法
2019/07/30 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
职业生涯规划书范文
2014/03/10 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
学生请假条格式
2014/04/11 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
大学生读书笔记范文
2015/07/01 职场文书
python运行脚本文件的三种方法实例
2022/06/25 Python
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技