python中的with...as...语句类似于try...finally...语句:

# -*- coding: utf-8 -*-
#
"""
with...as...语句
"""
#try...finally...语句
f = open('data.txt')
try:
data = f.read()
print(data)
finally:
f.close()
#with...as...语句
with open('data.txt') as f:
data = f.read()
print(data)
hello,leo!

hello,leo!

[Finished in .1s]

从上面可以看出,with...as语句看起来更为简洁。

原理

1.表达式执行并返回一个对象A

2.对象A调用__enter__()

3.__enter__()将返回对象B赋值给变量C

4.等表达式全部执行完毕,对象A调用__exit__()方法

下面来看一个例子:

# -*- coding: utf-8 -*-
#
"""
with...as...语句
"""
class Example:
def __enter__(self):
print('In__enter__()')
return "Over!"
def __exit__(self,*args):
print('In__exit__()')
return "Exit!"
def get_example():
return Example() with get_example() as example:
print(example)

结果:

In__enter__()
Over!
In__exit__()
[Finished in .1s]

分析:

1.表达式get_example()执行并返回对象Example()

2.对象Example()调用__enter__()方法

3.__enter__()方法将返回对象"Over!"赋值给变量example

4.对象Example()调用__exit__()方法

python学习之with...as语句的更多相关文章

  1. 【Python学习笔记】with语句与上下文管理器

    with语句 上下文管理器 contextlib模块 参考引用 with语句 with语句时在Python2.6中出现的新语句.在Python2.6以前,要正确的处理涉及到异常的资源管理时,需要使用t ...

  2. Python 学习笔记9 循环语句 For in

    For in 循环主要适用于遍历一个对象中的所有元素.我们可以使用它遍历列表,元组和字典等等. 其主要的流程如下:(图片来源于: https://www.yiibai.com/python/pytho ...

  3. Python 学习笔记8 循环语句 while

    While循环是哟中利用条件语句,不断的执行某一段代码块,达到批量操作输出等一系列的操作,直到条件不满足或者被强制退出为止. 其工作流程如下: (图片来源菜鸟教程:http://www.runoob. ...

  4. Python 学习笔记7 条件语句 If

    Python中条件语句if 是通过一条或者多条的执行语句的结果,来判断是否执行其包含的代码块. 通常会配合else.elif一起使用,达到根据条件进行多个代码块的执行操作. 简单的if score = ...

  5. python学习笔记-基础、语句、编码、迭代器

    #python的优缺点优点:Python简单优雅,尽量写容易看明白的代码,尽量写少的代码.缺点:第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地 ...

  6. Python学习记录4(语句)

    赋值语句 序列解包 条件语句 语句块 布尔变量 条件执行和if语句 条件运算符 循环 while语句 for循环 迭代工具 跳出循环 break continue while truebreak语句 ...

  7. python学习笔记2-条件语句

    #条件语句 ''' if 判断条件: 执行语句…… else: 执行语句…… ''' flag = False name = 'python' if name == 'python': # 判断变量否 ...

  8. python学习:利用循环语句完善输入设置

    利用循环语句完善输入设置 使用for循环: 代码1:_user = "alex"_password = "abc123" for i in range(3): ...

  9. python学习day4 数据类型 if语句

    1.变量的内存管理 cpython解释器垃圾回收机制 什么是垃圾,当一个值身上没有绑定变量名时,(该值的引用计数=0时)就是一个垃圾 age=18 #18的引用计数=1 x=age  #18的引用计数 ...

随机推荐

  1. JavaScript -- 清除缓存

    在客户端有一个HTML文件,用来提交输入信息,问题在于:每次按刷新时,发觉并不是整个页面重新被装载,好似是缓存中. 因为文本框中仍出现上次输入的值,只有在地址栏中按回车整个页面才重新装载,应当怎样避免 ...

  2. 解决kylin报错:java.lang.IllegalStateException

    一个kylin build job执行到第三步Extract Fact Table Distinct Columns时报错: 2017-05-24 20:04:07,930 ERROR [pool-9 ...

  3. 【转载】Instagram架构分析笔记

    原文地址:http://chengxu.org/p/401.html Instagram 架构分析笔记 全部 技术博客 Instagram团队上个月才迎来第 7 名员工,是的,7个人的团队.作为 iP ...

  4. R简易安装

    post={"title":"my Blog post","content":"Here's my blog post" ...

  5. Deferred content load was not performed. To provide the content, subscribe to the View's QueryControl event

    {"Deferred content load was not performed. To provide the content, subscribe to the View's Quer ...

  6. JS判断一个字符串是否包含一个子串函数.

    微信小程序 JS判断一个字符串是否包含一个子串函数. //str 字符串,name子串     contains:function(str,name){         if(str.indexOf( ...

  7. js实现全选,全不选,反选

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. python求pi的方法

    来自 #_*_ coding=utf-8 *_* ## {{{ http://code.activestate.com/recipes/578130/ (r5) def pi(places=10): ...

  9. 如何从官网下载Spring

    1.Spring下载地址http://repo.spring.io/release/org/springframework/spring/ 里面有各自版本下载: 方法二: 1.在百度中输入Spring ...

  10. servlet 简单filter避免中文乱码等

    Filter是个servlet中的接口,servlet内部实现了利用Filter来过滤请求.   可以在filter中根据条件决定是否调用chain.doFilter(request,response ...