在定义Foo时,定义了__enter__和__exit__方法,那么我们实例化的对象obj就是一个上下文管理器,
即含有__enter__和__exit__方法的对象就是上下文管理器。
所以在这里可以用with
with 上下文管理器:
语句体
当with遇到上下文管理器时,执行顺序:先执行上下文管理器的__enter__方法 -> 再执行语句体 -> 最后执行__exit__方法.
举例如下:
obj可以是单个变量或()括起来的元组; __enter__ 方法无返回左下图,有返回右下图,举例如下:
《《《--》》》
常见的上下文管理的用法:
with open("/tmp/foo.txt") as file:
data = file.read()
如果使用传统的 try/finally 范式,则要使用类似如下代码:
somefile = open(r'somefileName')
try:
for line in somefile:
print line
finally:
somefile.close()
使用 with 语句可以减少编码量;不管在处理对象过程中是否发生异常,都能保证 with 语句执行完毕后,关闭了打开对象