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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
简单理解Python中基于生成器的状态机
Apr 13 Python
python3 发送任意文件邮件的实例
Jan 23 Python
python reverse反转部分数组的实例
Dec 13 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python日志syslog使用原理详解
Feb 18 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
python3跳出一个循环的实例操作
Aug 18 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入门小知识
2008/03/24 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
Javascript 面向对象 命名空间
2010/05/13 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
pandas 空数据处理方法详解
2019/11/02 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
在keras里实现自定义上采样层
2020/06/28 Python
团日活动总结书格式
2014/05/08 职场文书
教师求职自荐信范文
2015/03/04 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
Mysql 用户权限管理实现
2021/05/25 MySQL
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL