这里,有几篇比较好啊的博客,很详细

https://blog.csdn.net/IAlexanderI/article/details/81027798

https://www.cnblogs.com/pyspark/articles/8819803.html

https://www.cnblogs.com/liujiacai/p/10059546.html

看同事写的代码用到了上下文管理器contextlib模块,利用with来引入上下文管理器,这里我就不说,也就是一个类和方法实现了__enter__ 和__exit__方法

@contextmanager的作用

将一个不是上下文管理器的类或对象变成一个上下文管理器

为什么我们要用上下文管理器?

提一个需求吧,在我们print一句话时,都要在他的前边和后面加上《》,比如这样《中国》,每句话都要求带上。我们可以每一个print都带上《》,但是如果其人不知道这个规定的该怎么办这时候我们可以构造一个上下文管理器

from contextlib import contextmanager


@contextmanager
def add_symbol():
    print('<<', end='')
    yield
    print('>>', end='')


with add_symbol():  # 如果yield没有返回值,这里就不需要加as
    print("日本", end='')

结果:

<<日本>>

执行顺序:先执行yield之前的代码,在执行上下文管理器下边的代码,最后执行yield后的代码。

posted on 2019-07-09 18:04  程序员一学徒  阅读(102)  评论(0)    收藏  举报