with 语法
平常在写Python代码的时候,经常会用到with 来处理一个上下文环境,比如文件的打开关闭,数据库的连接关闭等等。
with语法的使用,需要我们处理的对象实现__enter__和__exit__两个魔术方法来支持。__enter__函数处理逻辑函数之前需要做的事情,并返回操作对象作为as后面的变量,__exit__函数处理当代码离开with代码块以后的事情。
with语法非常方便的让我使用资源并且不用操心忘记后续操作所带来的隐患。
下面是一个简单的自己实现支持with的类对象示例:
class MyContextManager(object):
def __enter__(self):
print("Hello")returnself
def __exit__(self,*args):
print("Bye")
def work(self):
print("Do something...")
with MyContextManager()asworker:
worker.work()
运行以后结果为:
Hello
Do something...
Bye
并且with语法还支持嵌套,可以同时打开多个上下文环境,有时候这对于我们同时操作多个对象是很方便的,例如我们需要同时打开两个文件,一个读一个写,这时候就可以这样写:
with open(file_A) as reader, open(file_B, 'w') aswriter:for index, line inenumerate(read