Python 模擬試験

Python実践 模擬試験 第2回 問10・3章 Pythonの言語仕様(名前空間とスコープ)

nonlocal

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

def counter():
    n = 0
    def inc():
        nonlocal n
        n += 1
        return n
    return inc
c = counter()
c()
print(c())
  1. A

    2

  2. B

    1

  3. C

    0

  4. 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

学習のポイント:クラスで状態を持つ書き方と比べてみる。

この問題を演習で解く →

問題一覧へ

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