nonlocal
次のコードを実行したときの出力として、正しいものを1つ選べ。
def counter():
n = 0
def inc():
nonlocal n
n += 1
return n
return inc
c = counter()
c()
print(c())
- A
2 - B
1 - C
0 - D
UnboundLocalErrorが発生する。
正解と解説を見る
正解:A
nonlocal は、外側の関数のローカル変数を内側の関数から更新する。global はモジュールレベルの変数。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `def counter():` | — |
| 2 | `c = counter()` | — |
| 3 | └ `n = 0` | n = 0 |
| 4 | └ `def inc():` | — |
| 5 | └ `return inc` | — |
| 6 | `c()` | — |
| 7 | └ `nonlocal n` | n = 0 |
| 8 | └ `n += 1` | n = 1 |
| 9 | └ `return n` | n = 1 |
| 10 | `print(c())` | — |
| 11 | └ `nonlocal n` | n = 1 |
| 12 | └ `n += 1` | n = 2 |
| 13 | └ `return n` | n = 2 |
| 結果 | 実際の出力 | 2 |
- A
正しい。
nonlocalにより、外側の関数の変数nを更新できる。クロージャが状態を保つ。 - B
誤り。2 回呼ぶと 2 になる。
- C
誤り。
nは呼び出しごとに増える。 - D
誤り。
nonlocalで外側のnを宣言している。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。