関数とスコープ・ラムダ比較問題

関数内でのglobal宣言とnonlocal宣言の使用目的の違いについて、正しいのはどれですか?

A.global宣言はグローバルスコープの変数を参照するため、nonlocal宣言はローカルスコープを参照するためである
✗ 「参照するため」は不正確です。両者は変数を修正可能にするための宣言です。
B.global宣言はグローバルスコープの変数を修正可能にし、nonlocal宣言は外側のローカルスコープの変数を修正可能にする← 正解
✓ 正解です。global宣言はグローバル変数の修正、nonlocal宣言は外側のローカル変数の修正を可能にします。
C.nonlocal宣言はネストされた関数内でのみ使用でき、global宣言はどの関数でも使用可能である
✗ nonlocal宣言はネストされた関数内でのみ機能しますが、globalはその制限がありません。説明は不完全です。
D.global宣言と nonlocal宣言は同じ効果であり、使い分ける必要はない
✗ 両者は異なる目的を持つ宣言です。global宣言はモジュールレベルの変数、nonlocal宣言はクロージャの変数に対応します。

Python 3 エンジニア認定基礎試験 の問題一覧