Python 模擬試験

Python基礎 模擬試験 第5回 問14・4章 制御構造ツール(デフォルト引数)

None を使った安全なデフォルト値

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

def add(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items
print(add(1), add(2))
  1. A

    [1] [1, 2]

  2. B

    [1, 2] [1, 2]

  3. C

    TypeError が発生する。

  4. D

    [1] [2]

正解と解説を見る

正解:D

デフォルト値にミュータブルなオブジェクトを使うと共有されてしまう。None を使い、関数内で作るのが定石。

順実行する行実行後の変数
1`def add(item, items=None):`—
2`print(add(1), add(2))`—
3└ `if items is None:`items = None
4└ `items = []`items = []
5└ `items.append(item)`items = [1], item = 1
6└ `return items`items = [1]
7└ `if items is None:`items = None
8└ `items = []`items = []
9└ `items.append(item)`items = [2], item = 2
10└ `return items`items = [2]
結果実際の出力[1] [2]

学習のポイント:デフォルト値は関数が定義された時に一度だけ評価される。

この問題を演習で解く →

問題一覧へ

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