上下文管理协议

2019-05-02  本文已影响0人  ___大鱼___

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方法

上一篇 下一篇

猜你喜欢

热点阅读