1,上下文:

    在程序进入计算时,我们可以把计算过程分成三个阶段:

  (1)在程序进入计算前,此时需要准备的资源(比如文件句柄,网络连接等)叫做上文。

  (2)程序进入计算。

  (3)程序退出计算,此时需要释放的资源(比如文件句柄,网络连接等)叫做下文。

  

 2,上下文管理器:

  上下文管理器为用户只需要关心自己的应用程序,对其上游的资源申请和下游的资源释放通过统一的方式进行管理。

3,应用场景:

  (1)比如文件操作,网络操作,数据库操作等,资源的申请和释放,可以放在上下文管理器中,达到对用户的隐藏作用,并且简化代码结构。

  (2)对异常的简化处理。

4,上下文管理器的定义:

  在类中实现了__enter__和__exit__特殊方法的类叫做上下文管理器类。

  __enter__:上文,即在进入应用程序之前,自动调用,初始化资源。

  __exit__:下文,即在退出应用程序之后,自动调用,释放资源,并对异常进行接收(如果产生异常)。

  调用方式:

  with 表达式 as 别名:

    代码段

5,为函数创建上下文管理器:

  对于一些上下文管理,我们不希望全部定义在类中,可以通过contextlib模块联合生成器和装饰器进行处理。

import contextlib

@contextlib.contextmanager
def test():
print "上文:初始化资源"
try:
# 返回资源句柄(根据需要定义自己的资源文件)
yield 0
except Exception as e:
# 异常捕获,可通过traceback模块对异常进行提取
pass
finally:
print "下文:释放资源"

# 使用上下文
with test() as t:
print 1/t  # 资源的使用
posted on 2020-08-30 22:21  lwp-boy  阅读(142)  评论(0编辑  收藏  举报