15章コンテキストマネージャとelseブロック
コンテキストマネージャはサブルーチンそのものと同じくらい重要になるかもしれません。わたしたちは、これについてはまだ表面しか触れていません。(中略)BASICには
with
文があり、多くの言語にもwith
文があります。しかし、どれも機能的には異なりますし、やれることはとても浅いものです。ドットを連発しながら(属性を)参照しなくても済むようにするだけで、設定や終了処理はしません。名前が同じだというだけで、同じものと判断しないでください。with
文は非常に重要です。——Raymond Hettinger雄弁なPythonの伝道者PyCon US 2013のキーノート「What Makes Python Awesome」より[15-01]†1
[†1] with
文のくだりはビデオの23:00~26:15の間に登場します。
本章では制御フロー機能を説明します。ここで取り上げる機能は他の言語ではあまり一般的ではないため、Pythonでも見過ごされたり、あまり活用されなかったりする傾向があります。具体的には次の機能です。
with
文とコンテキストマネージャfor
、while
、try
文で使うelse
with
文はコンテキストマネージャオブジェクトの制御下で、一時的なコンテキストを設定し、確実に終了処理をします。これによりエラーを防止し、テンプレートそのままなコードを減らし、同時にAPIを安全かつ簡単に使えるようにします。Pythonプログラマはファイルを自動的に閉じるという目的にとどまらず、より広い適用範囲を見出しています。
else
とwith
はお互いまったく関係ないのですが、もう第Ⅴ部に入っており、他にelse
を説明する場所もなければ1ページだけの章を起こしたくはないので、ここで説明させてもらいます。 ...
Get Fluent Python ―Pythonicな思考とコーディング手法 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.