前提・実現したいこと
python: 3.6.4
公式ドキュメントの「9.2.1.スコープと名前空間の例」を学習しています。
公式:https://docs.python.jp/3/tutorial/classes.html
global文で宣言した変数への、代入時の動きがわかりません。
解説よろしくお願い致します。
該当のソースコード①
Python
1>>> def scope_test(): 2... def do_local(): 3... spam = "local spam" 4... 5... def do_nonlocal(): 6... nonlocal spam # 外側の関数内の変数に再束縛 7... spam = "nonlocal spam" 8... 9... def do_global(): 10... global spam # グローバル変数として解釈するよう指定 11... spam = "global spam" 12... 13... spam = "test spam" 14... do_local() 15... print("After local assignment:", spam) 16... do_nonlocal() 17... print("After nonlocal assignment:", spam) 18... do_global() 19... print("After global assignment:", spam) 20... 21>>> scope_test() 22After local assignment: test spam 23After local assignment: nonlocal spam 24After local assignment: nonlocal spam # なぜ"global spam"にならないのかわからない 25>>> print("In global scope:", spam) 26In global scope: global spam
scope_test()関数内でdo_global()関数を実行すると、予想では
「After local assignment: global spam」
が出力されると思いましたが、「nonlocal spam」なままでした。
私自身の解釈では、
「変数 spam がグローバル変数になったのだから、グローバル変数 spam に"global spam"を代入した」
というように考えていたのですが、どうやら違うようです。
何故こうなっているのか、全くわかりません。
解説・ご教示よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/06 09:18