with=前戏+后戏.zip?

“上下文管理器负责前戏和后戏,让你专注于过程。。。

在Python编程中,可能会经常碰到一些特殊的语句块,在执行此语句块前需要做一些准备工作,当语句块执行完毕之后,又需要做一些收尾工作。

比如:对数据库进行操作时,需要先获取数据库连接对象,操作完数据之后,还需要释放数据库连接。

当获取一个需要加锁的数据时,比如更新一个商品的库存数量。需要先判断是否有锁(其他模块正在使用这个数据),否则就给它加把锁,处理完毕之后,再把锁释放掉。

这种铺垫和收尾工作,如果忘记处理,必然会导致问题。针对这一问题,python隆重推出上下文管理器(Context Manager)概念。我们可以通过上下文管理器来定义代码块执行前后的处理工作。

01

Context Manager主要由两个魔法方法实现:__enter__ __exit__,我们创建新的上下文管理器的时候,必须要实现这两个方法。也即创建了上下文管理器协议。

自定义内容管理:

Python中用with关键字使用上下文管理器。

不使用with语句时:

使用with语句:

在第二个写法中,我们并没有关闭文件。但是程序依然可以正常运行。这是因为在执行with open('/tmp/data.txt', 'wb') as f:时,程序自动实现了__enter__和__exit__方法,做完写文件的操作之后,文件会关闭,我们并不用再写多余的文件关闭操作。是不是省心又省事儿?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G01P8U00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券