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 # 资源的使用