什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情
要实现with上下文管理器,需要对象实现enter()和exit()2个函数。
class Closer:
def __init__(self, obj):
self.obj = obj
def __enter__(self):
return self.obj
def __exit__(self):
self.obj.close() # 前提是obj对象有close()方法
from ftplib import FTP
with Closer(FTP(‘hostname‘)) as ftpconn:
print(ftpconn.__dict__)
# with语句退出时,会自动调用__exit__()方法。
利用contextlib创建一个上下文管理器
from contextlib import contextmanager
@contextmanager
def g(name):
print(f‘<{name}>‘)
yield # 这行代码表示__enter__()执行完毕,下面的代码表示__exit__()执行的效果
print(f‘</{name}>‘)
with g(‘h1‘) as t:
print(t) #yield返回为None
print(‘foo‘)
##output##
None
foo
原文:https://blog.51cto.com/jackor/3190782