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模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
python生成随机密码或随机字符串的方法
Jul 03 Python
python发送HTTP请求的方法小结
Jul 08 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
利用python在excel里面直接使用sql函数的方法
Feb 08 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
python:动态路由的Flask程序代码
Nov 22 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
pandas按条件筛选数据的实现
Feb 20 Python
详细介绍python类及类的用法
May 31 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 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通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
Python专用方法与迭代机制实例分析
2014/09/15 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
Python实现的归并排序算法示例
2017/11/21 Python
Python3 replace()函数使用方法
2018/03/19 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
Python中Numpy mat的使用详解
2019/05/24 Python
python中Mako库实例用法
2020/12/31 Python
python中操作文件的模块的方法总结
2021/02/04 Python
adidas泰国官网:adidas TH
2020/07/11 全球购物
解决方案设计综合面试题
2015/08/31 面试题
简历中自我评价怎么写
2014/02/12 职场文书
洗发露广告词
2014/03/14 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
一份文言文检讨书
2014/09/13 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
房产公证书样本
2015/01/23 职场文书
幼儿教师辞职信
2015/02/27 职场文书
个人党性分析总结
2015/03/05 职场文书
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers