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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
Python实现全角半角字符互转的方法
Nov 28 Python
python爬取m3u8连接的视频
Feb 28 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python for 循环获取index索引的方法
Feb 01 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
浅谈怎么给Python添加类型标注
Jun 08 Python
关于的python五子棋的算法
May 02 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
一个JS翻页效果
2007/07/23 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
python3 使用traceback定位异常实例
2020/03/09 Python
苹果音乐订阅:Apple Music
2018/08/02 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
口头翻译求职人自荐信
2013/12/07 职场文书
大学生村官任职感言
2014/01/09 职场文书
列车长先进事迹材料
2014/01/25 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
文明生主要事迹
2014/05/25 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
银行先进个人总结
2015/02/15 职场文书
物流业务员岗位职责
2015/04/03 职场文书
党小组推荐意见
2015/06/02 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android