python模块之contexlib

一、上下文管理器

with是python实现上下文管理器的核心关键词。它能够在代码执行前和执行后做一些额外的事情。

最常见的代码恐怕就是文件操作了。

实际上,with语句是通过__enter__和__exit__来实现的。

with在开始时调用__enter__,并将结果赋给as后面的变量f。在结束时会调用__exit__,如果有异常,则会把异常类型、异常值和跟踪地址作为参数传递给__eixt__。

如果我们自己使用with,则必须在定义的类中实现__enter__和__exit__方法。

二、contextlib模块

python3内置了contextlib模块来帮助我们更加方便地实现上下文管理器。

contextlib必须调用装饰器来装饰一个需要使用with语句的函数。在函数内部必须要使用yield将该函数变成可迭代对象。

在with时,将yield返回值赋给as后的变量。此时已执行到yield时。f包裹的内容作为do something继续执行。最后才会执行file end。

文章链接:https://www.cnblogs.com/kuaizifeng/p/9082794.html

一指禅 戳戳戳!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180524A1I63W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券