python中with if else语句案例详解
代码:
class aa():
def __enter__(self):
print("进入了aa__enter__")
return "aa__enter__"
def __exit__(self, exc_type, exc_value, traceback):
print("进入了aa__exit__")
return "aa__exit__"
class bb():
def __enter__(self):
print("进入了bb__enter__")
return "bb__enter__"
def __exit__(self, exc_type, exc_value, traceback):
print("进入了bb__exit__")
return "bb__exit__"
with aa() if False else bb() as t:
print("if后面为False的情况: ",t)
print("#"*40)
with aa() if True else bb() as t:
print("if后面为True的情况: ",t)
输出结果:
进入了bb__enter__
if后面为False的情况: bb__enter__
进入了bb__exit__
########################################
进入了aa__enter__
if后面为True的情况: aa__enter__
进入了aa__exit__
从这里的输出可以清楚的看到使用with的好处:使用 with 语句确保在嵌套块的末尾调用 exit 方法。
所以在文件操作中经常使用with open来打开文件,其原因就是在文件对象中定义了 enter 和 exit 方法,即文件对象也实现了上下文管理器,首先调用 enter 方法,然后执行 with 语句中的代码,最后调用 exit 方法。 即使出现错误,也会调用 exit 方法,也就是会关闭文件流。这样就避免了忘记关闭文件所带来的一些问题。
>>> with open('./test_runoob.txt') as f:
... read_data = f.read()
>>> # 查看文件是否关闭
>>> f.closed
True