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 相关文章推荐
浅谈编码,解码,乱码的问题
Dec 30 Python
python读取和保存视频文件
Apr 16 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
Python安装与基本数据类型教程详解
May 29 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
python常用排序算法的实现代码
Nov 08 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
Python基于httpx模块实现发送请求
Jul 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为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
js charAt的使用示例
2014/02/18 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
环保建议书作文
2014/03/12 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技