Python3中with上下文管理器的用法
# 代码如下
class Example:
def __enter__(self):
return '哈哈哈'
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit!')
def get_data():
return Example()
with get_data() as exp:
print(exp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 程序执行后输出结果如下
# 解释
# with语句的原理
上下文管理协议(Context Management Protocol)
- 包含方法
__enter__()
和__exit__()
,支持该协议的对象要实现这两个方法。
- 包含方法
上下文管理器(Context Manager)
- 支持上下文管理协议的对象,这种对象实现了
__enter__()
和__exit__()
方法。上下文管理器定义执行with
语句时要建立的运行时上下文,负责执行with
语句块上下文中的进入
与退出
操作。通常使用with
语句调用上下文管理器,也可以通过直接调用其方法来使用。
- 支持上下文管理协议的对象,这种对象实现了
# 自定义上下文管理器
如上代码就是一个自定义的上下文管理器。
- 执行
get_data()
会生成上下文管理器context_manager
with
后面必须跟一个上下文管理器,如果使用了as
,则是把上下文管理器的__enter__()
方法的返回值赋值给exp
- 当我们使用with的时候,
__enter__()
方法被调用,并且将返回值赋值给as
后面的变量,并且在退出with
的时候自动执行__exit__()
方法
编辑 (opens new window)
上次更新: 2021/08/15, 14:23:41
- 01
- Python实现对字符串的加解密02-25
- 02
- Python3对大文件中指定字符进行排序再写入到新的文件10-24
- 03
- Ubuntu下配置adb环境连接Android设备进行调试08-17