def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)
scope_test()
print("In global scope:", spam)
こんにちは、私はPythonクラスを扱っており、上記の例を公式の文書に当てています。範囲について:グローバルおよびローカル割り当て
出力:ローカル割り当てた後
:ローカル以外の割り当て後のテストスパム
:グローバル割り当てた後、ローカル以外のスパム
:グローバルな範囲で非ローカルスパム
:グローバルスパム
do_local
の後の最初の印刷の結果は、まだ "テストスパム"を出力しますが、2番目の印刷が "非ローカルスパム"を出す理由は分かりません。
どのような違いがありますか?
do_local()を実行すると、do_local()が実行され、spam変数が「ローカルスパム」として変更され、do_nonlocal()と同じように動作して「非ローカルスパム」になる可能性があります。しかし、そうではありません。
なぜですか?ここで
um、それは第2のケースでは「非ローカル」ですか? –
@DavisHerring Yep – delinco