with语句一般写法
with open('test01_with','r') as reader:
content = reader.read()
print(content)
先理清几个概念
上下文表达式:with open('test.txt') as f:
上下文管理器:open('test.txt')
f 不是上下文管理器,应该是资源对象。
自定义上下文管理器
简单点说,就是在一个类里,实现了__enter__和__exit__的方法,这个类的实例就是一个上下文管理器。
- enter 进入对象范围时(一般代码块开始)被调用;
- exit 离开对象范围时(代码块结束)被调用;
class FileManager(object):
def __init__(self,name,mode):
print("执行__init__方法")
self.name = name
self.mode = mode
self.file = None
def __enter__(self):
print("执行__init__方法")
self.file = open(self.name,self.mode)
return self.file # 注意这里的返回值
def __exit__(self, exc_type, exc_val, exc_tb):
print("调用__exit__方法")
if self.file:
self.file.close() # with语句内部的功能实现完后执行
with FileManager('test01_with','r') as file:
content = file.read()
print(content)
# 运行结果
#执行__init__方法
#执行__init__方法
#fadfasdf
#调用__exit__方法
参考资料:
https://www.cnblogs.com/wongbingming/p/10519553.html
https://blog.csdn.net/hbnn111/article/details/78029011