python学习之with...as语句

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 0.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 0.1s]

分析:

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

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

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

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

原文地址:https://www.cnblogs.com/leomei91/p/7611888.html