“上下文管理器负责前戏和后戏,让你专注于过程。。。”
在Python编程中,可能会经常碰到一些特殊的语句块,在执行此语句块前需要做一些准备工作,当语句块执行完毕之后,又需要做一些收尾工作。
比如:对数据库进行操作时,需要先获取数据库连接对象,操作完数据之后,还需要释放数据库连接。
当获取一个需要加锁的数据时,比如更新一个商品的库存数量。需要先判断是否有锁(其他模块正在使用这个数据),否则就给它加把锁,处理完毕之后,再把锁释放掉。
这种铺垫和收尾工作,如果忘记处理,必然会导致问题。针对这一问题,python隆重推出上下文管理器(Context Manager)概念。我们可以通过上下文管理器来定义代码块执行前后的处理工作。
01
—
Context Manager主要由两个魔法方法实现:__enter__ __exit__,我们创建新的上下文管理器的时候,必须要实现这两个方法。也即创建了上下文管理器协议。
自定义内容管理:
Python中用with关键字使用上下文管理器。
不使用with语句时:
使用with语句:
在第二个写法中,我们并没有关闭文件。但是程序依然可以正常运行。这是因为在执行with open('/tmp/data.txt', 'wb') as f:时,程序自动实现了__enter__和__exit__方法,做完写文件的操作之后,文件会关闭,我们并不用再写多余的文件关闭操作。是不是省心又省事儿?
领取专属 10元无门槛券
私享最新 技术干货