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分割TXT文件成4K的TXT文件
May 23 Python
python模块restful使用方法实例
Dec 10 Python
python基础教程之元组操作使用详解
Mar 25 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
利用aardio给python编写图形界面
Aug 21 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
python查看模块安装位置的方法
Oct 16 Python
Django 静态文件配置过程详解
Jul 23 Python
Django框架HttpRequest对象用法实例分析
Nov 01 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
通过python检测字符串的字母
Feb 18 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 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
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
python支持多线程的爬虫实例
2019/12/21 Python
Python有参函数使用代码实例
2020/01/06 Python
Python enumerate内置库用法解析
2020/02/24 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
给海归自荐信的建议
2013/12/13 职场文书
学生打架检讨书
2014/02/14 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
《口技》教学反思
2014/02/21 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
Python集合set()使用的方法详解
2022/03/18 Python
Java Spring读取和存储详细操作
2022/08/05 Java/Android