python中类里面只要实现 __enter__、__exit__
方法就实现了上下文协议可以用whit 语句直接用 始终会执行 __enter__、__exit__
中的代码无论是否报错
class WithClass:
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print exc_tb
def do_something(self):
print 'do something'
with WithClass() as a:
print a.do_something()
python中帮我们封装了一个包可以使我们的函数可以用来作为上下文管理器
# coding: utf-8
import contextlib
@contextlib.contextmanager
def file_open(filename):
print '打开文件'
yield {}
print '关闭文件'
with file_open('a.txt') as a:
print 'file processing'
函数中必须有yield
yield 之前相当于我们的enter方法 yield之后代码相当于exit方法
网友评论