
266
第 7 章 データ型とプロトコル
略して呼び出せます。
>>> sum([i for i in range(11)]) #
リスト内包の加算
55
>>> sum((i for i in range(11))) #
ジェネレータ式の加算
55
>>> sum(i for i in range(11)) #
唯一の引数として指定するときは、
()
を省略できる
55
ジェネレータ式でも、リスト内包と同じように、
if
による値の選択やネスト、変数の分解など
を行えます。
>>> list(x+y for x in 'abc'
... for y in '123' if y < '3') # for
のネストと
if
['a1', 'a2', 'b1', 'b2', 'c1', 'c2']
7.5
コンテキストマネージャ
with
文は、ブロックのはじまりと終わりを指定されたオブジェクトに通知し、ブロックの開始
処理と終了処理を実行します。
with
文に指定するオブジェクトはコンテキストマネージャと呼ば
れ、以下のインターフェースを実装します。
contextmanager.__enter__(
self
)
with
文で呼び出され、リソースの確保などの初期化処理を行います。
with
文の
as
句で変数が指
定されていれば、このメソッドの戻り値が代入されます。
contextmanager.__exit__(
self
,
exc_type
,
exc_value
,
traceback
)
with
ブロックを終了する時に呼び出されます。
例外の発生によりブロックが中断した場合は、 ...