可変なデフォルト値
次のコードを実行したときの出力として、正しいものを1つ選べ。
def f(a, b=[]):
b.append(a)
return b
f(1)
print(f(2))
- A
[2] - B
[1, 2] - C
[1] - D
[]
正解と解説を見る
正解:B
ミュータブルなデフォルト値は共有される。None をデフォルトにして、関数の中で新しく作るのが定石。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `def f(a, b=[]):` | — |
| 2 | `f(1)` | — |
| 3 | └ `b.append(a)` | b = [1], a = 1 |
| 4 | └ `return b` | b = [1] |
| 5 | `print(f(2))` | — |
| 6 | └ `b.append(a)` | b = [1, 2], a = 2 |
| 7 | └ `return b` | b = [1, 2] |
| 結果 | 実際の出力 | [1, 2] |
- A
誤り。デフォルトのリストが共有される。
- B
正しい。デフォルト値は関数の定義時に一度だけ作られ、呼び出しのたびに共有される。
- C
誤り。2 回目の呼び出しの結果。
- D
誤り。値が追加されている。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。