Python的with用法理解
Python的with理解
标签(空格分隔): Python
with做为一种上下文管理器,在Python中的作用可以简单的理解为是用来代替try...except...finally的处理流程。
with通过__enter__方法初始化,然后在__exit__中做善后以及处理异常。对于一些需要预先设置,事后要清理的一些任务,with提供了一种非常方便的表达。在紧跟with后面的语句被求值运算后,会调用运算返回对象的__enter__方法,并将__enter__的返回结果赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用返回对象的__exit__()方法执行清理工作。
就像在文件操作中:
file = open("file.txt")
try:
data = file.read()
finally:
file.close()
在使用了with...as...后,代码将精简为:
with open("file.txt") as file:
data = file.read()
在上面的代码中,open()函数会返回一个类型为file的对象,该对象具有__enter__与__exit__方法(可以通过dir(file),type(file)查看),之后调用对象的__enter__方法,将返回值赋值给file变量,所以在使用with...as...操作文件时不需要显示的关闭文件。
既然知道with...as...中最重要的就是__enter、__exit__,那我们就可以来自定义一个上下文管理器。
- 其中:
__enter__方法将在进入代码块前被调用。__exit__将在离开代码块之后被调用(即使在代码块中遇到了异常)。
class WithDemo:
def __enter__(self):
print "in __enter__"
return "WithDemo"
def __exit__(self, type, value, trace):
print "in __exit__"
def get_demo_with():
return WithDemo()
with get_demo_with() as demo:
print "demo:", demo
执行结果为:
in __enter__
demo:WithDemo
in __exit__
在刚开始的时候就已经说,with..as..可以用来代替try...except...finally...的流程操作,上面都在说try...finally...的情况,那异常呢?如果仔细点会发现__exit__()的参数有三个,这三个参数便是为异常提供处理的参数。
class WithDemo:
def __enter__(self):
return self
def __exit__(self, type, value, trace):
print "type:", type
print "value:", value
print "trace:", trace
def create_trace(self):
return (1/10) + 10
with WithDemo() as demo:
demo.create_trace()
跑一下代码就能发现代码打印出了type, value, trace。
Python的with用法理解的更多相关文章
- python 中@ 的用法【转】
这只是我的个人理解: 在Python的函数中偶尔会看到函数定义的上一行有@functionName的修饰,当解释器读到@的这样的修饰符之后,会先解析@后的内容,直接就把@下一行的函数或者类作为@后边的 ...
- Python关于self用法重点分析
在介绍Python的self用法之前,先来介绍下Python中的类和实例…… 我们知道,面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,比如学生这个抽象的事物,可以 ...
- python x[:] x[::]用法总结
python x[:] x[::]用法总结 X[:,0] # 二维数组取第1维所有数据 X[:,1] # 第2列 X[0,:] # 第1行 X[3,:] # 第三行 X[1:4,:] # 第一二三行 ...
- 【python】self用法详解
在介绍Python的self用法之前,先来介绍下Python中的类和实例我们知道,面向对象最重要的概念就是类(class)和实例(instance). 类是抽象的模板,比如学生这个抽象的事物,可以用一 ...
- 用Python 的一些用法与 JS 进行类比,看有什么相似?
Python 是一门运用很广泛的语言,自动化脚本.爬虫,甚至在深度学习领域也都有 Python 的身影.作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数.解构赋值. ...
- Python中flatten用法
Python中flatten用法 原创 2014年04月16日 10:20:02 标签: Python / flatten 22667 一.用在数组 >>> a = [[1,3],[ ...
- Python高阶用法总结
目录 1. lambda匿名函数 1.1 函数式编程 1.2 应用在闭包 2. 列表解析式 3. enumerate内建函数 4. 迭代器与生成器 4.1 迭代器 4.3 生成器 5. 装饰器 前言: ...
- 详解python中@的用法
python中@的用法 @是一个装饰器,针对函数,起调用传参的作用. 有修饰和被修饰的区别,‘@function'作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义). 代码1 ...
- python map 的用法
map的用法 ——.我们来分析map在python的源码 class map(object): """ map(func, *iterables) --> map ...
随机推荐
- No.021:Merge Two Sorted Lists
问题: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...
- python征程2.0(python基础)
1.python中有一些基本规则的特殊字符. (1)#表示这后的字符为python注释. (2)\n标准的行分隔符. (3)\继续上一行.(也就是过长的语句可以使用反斜杠(\)分解成几行) ) and ...
- The habits of highly successful people
1.Morning Routine (早上列行公事) Probably the most common habit ultra-successful people have is they can t ...
- 【IScroll深入学习】突破移动端黑暗的利器(上)
前言 在去年,我们对IScroll的源码进行了学习,并且分离出了一段代码自己使用,在使用学习过程中发现几个致命问题: ① 光标移位 ② 文本框找不到(先让文本框获取焦点,再滑动一下,输入文字便可重现) ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q141-Q143)
Question 141 You are planning an upgrade to a SharePoint 2010 application. You have the following r ...
- iOS 疑难杂症 — — 推送本地国际化 loc-key 本地化失败的问题
声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 一.准备 推送本地国际化官方 ...
- 项 目 管 理 知 识 体 系 指 南 (PMBOK2008)
项 目 管 理 知 识 体 系 指 南 (第4版) PMBOK2008 输入 工具与技术 输出 4.项目整合管理 4.1 制定项目章程 4.1.1.1 项目工作说明书 4.1.2.1 专家判断 4.1 ...
- YII2 项目安装步骤及异常记录
项目环境: 操作系统:windows 7 版本管理:git 该项目我是在mac上面创建的,mac上面的环境也是一波三折啊!但我同事的环境是在windows上面,因为是前端同学,所以只好我再次操刀了.. ...
- java 版本EChart使用
一.简介 EChart是百度开发的js图表软件,用它我们可以很方便地以图形化的方式对数据进行分析统计.该种方式js在页面动态拼接json数据,再进行渲染.这种方法的优点是,灵活,可以随时进行修改.缺点 ...
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...