Python 模擬試験

Python実践 模擬試験 第1回 問10・3章 Pythonの言語仕様(withとコンテキストマネージャ)

__enter__ と __exit__

次のコードを実行したときの出力として、正しいものを1つ選べ。

class CM:
    def __enter__(self):
        print("in")
        return self
    def __exit__(self, *a):
        print("out")
with CM():
    print("body")
  1. A

    body、in、out の順に出力される。

  2. B

    in と body だけが出力される。

  3. C

    in、body、out の順に、別々の行に出力される。

  4. D

    in、out、body の順に出力される。

正解と解説を見る

正解:C

with 文は、__enter__・__exit__ を持つコンテキストマネージャを使う。例外が起きても __exit__ が呼ばれる。

順実行する行実行後の変数
1`class CM:`—
2└ `def __enter__(self):`—
3└ `def __exit__(self, *a):`—
4`with CM():`—
5└ `print("in")`—
6└ `return self`—
7`print("body")`—
8`with CM():`—
9└ `print("out")`—
結果実際の出力in / body / out

学習のポイント:contextlib.contextmanager で、ジェネレータからも作れる。

この問題を演習で解く →

問題一覧へ

このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。