【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充

C15 上下文管理器和else块

15.1 先做这个, 再做那个: if语句之外的else块

自测

1.是except执行后在执行else模块,还是except不执行才调用else?
【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充

答案

1.
【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充
如果你回答错了,就想一想,else被一直捕获了异常,那么是不是等于这个异常处理失效了。

15.2 上下文管理器和with块

自测

1.上下文管理器协议包括哪两个方法?
2. 听说看到with 语句你都会手痒加个as,这种做法总有必要吗?
3. 重复导入同一个(如import sys在同一个代码块中执行了好几次)模块会消耗很多资源吗?

答案

1.
【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充
2.
【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充
3.
不会,因为python会缓存导入的模块。

15.4 使用@contextmanager

自测

[email protected]中yield关键字作用?

答案

1.
相当于做了分割,yeild本身会绑定到 with 语句中 as 子句的目标变量上。
【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充
但以下的图并不是一个标准的写法,标准的写法还应该加上异常处理。因为我们永远不知道上下文管理器的用户会在 with 块中做什么。
【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充
【流畅的python】笔记(C15上下文管理器和else块)自测知识点和书籍补充