Python - With
场景
资源是有限的,使用过后需要释放,否则会造成资源泄露
File
1 | for x in range(10_000_000): |
context manager 帮助自动分配并释放资源 - with 语句
1 | for x in range(10_000_000): |
try - finally
1 | f = open('test.txt', 'w') |
Lock
try - finally
1 | import threading |
with
1 | import threading |
实现
类
基于类的上下文管理器
发生异常
生成器
基于生成器的上下文管理器
- 使用 contextlib.contextmanager 来定义基于生成器的上下文管理器,用来支持 with 语句
- file_manager() 函数是一个生成器
- 执行 with 语句时,便会打开文件,并返回文件对象
- 当 with 语句执行完毕后,执行 finally block 中关闭文件操作
选择
- 基于类的上下文管理器和基于生成器的上下文管理器,两者在功能上是一致的
- 基于类的上下文管理器更加弹性,适用于大型系统
- 基于生成器的上下文管理器更加灵活,适用于中小型程序
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.