Python 模擬試験

Python実践 模擬試験 第1回 問7・3章 Pythonの言語仕様(関数と引数)

クロージャの遅延束縛

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

fs = [lambda: i for i in range(3)]
print([f() for f in fs])
  1. A

    [0, 1, 2]

  2. B

    [0, 0, 0]

  3. C

    [3, 3, 3]

  4. D

    [2, 2, 2]

正解と解説を見る

正解:D

クロージャは変数そのものを参照するので、ループ変数を使うと遅延束縛になる。デフォルト引数 lambda i=i: i で値を固定できる。

順実行する行実行後の変数
1`fs = [lambda: i for i in range(3)]`fs = [<function <lambda> at 0x…>, <function …
2`print([f() for f in fs])`fs = [<function <lambda> at 0x…>, <function …
結果実際の出力[2, 2, 2]

学習のポイント:期待と異なる結果になりやすい、よくある落とし穴。

この問題を演習で解く →

問題一覧へ

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