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中的pass语句使用方法讲解
May 14 Python
机器学习python实战之手写数字识别
Nov 01 Python
python实现图片处理和特征提取详解
Nov 13 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Python实现翻转数组功能示例
Jan 12 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
Python 读写文件的操作代码
Sep 20 Python
python绘制多个曲线的折线图
Mar 23 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
python从PDF中提取数据的示例
Oct 30 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和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
PHP7内核之Reference详解
2019/03/14 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
关于redux-saga中take使用方法详解
2018/02/27 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
python处理json数据中的中文
2014/03/06 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
我的中国梦演讲稿小学篇
2014/08/19 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
安全责任书
2015/01/29 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python