私はPythonでプログラミングを楽しんでいるアマチュアです。最近、関数のローカル変数に関する質問がありました。 Pythonのローカル変数
"""
Scenario-1:
"""
a=4
def g(x):
#global a
#a=a+2
print(a)
return x+a
私はコンソールでg(2)
を入力
4
6
----何もここに私のサンプルコードです。 その後、私は"a=a+2")
前"#"
を削除(にコードを変更します。その後、コードを再実行してg(2)
を入力し、それが示し
"""
Scenario-2:
"""
a=4
def g(x):
#global a
a=a+2
print(a)
return x+a
:
*UnboundLocalError: local variable 'a' referenced before assignment*
私の第一の質問は次のとおりです。シナリオ1では、割り当てエラーが発生する前に参照一切はありませんなぜ私は、x+a
を返すよう
また、私は、コードを変更します?
"""
Scenario-3:
"""
a=4
def g(x):
global a
a=a+2
print(a)
return x+a
が、私は、コードを再実行してg(2)
を入力し、それが返されます。 6
8
----何も間違っています。私は、関数g(x)の中でグローバルであることを宣言して
なぜ、:しかし、私は入力して、コンソールに入力したとき、それが返されます。
4
ここでは、グローバル変数の私の第二の質問は、来ます変数aは6 = 4 + 2(a = a + 2による)に変化しなかったか?私は変数aがいわゆる "グローバル"であると考えましたが、関数内部で値が変化するとmain()にある関数の外側が変化します。私が間違っている?
上記は私の2つの基本的な質問です。どうもありがとうございました!
私のテキストとコードを編集していただきありがとうございます!私は次回に自分で作ってください –
*バインディング*によって範囲が決まります。代入は束縛の一形態です。あなたが 'g()'の 'a'に代入するので、ローカルであると判断されます。バインドする他のアクションは、 'for'でターゲットとして名前を使用するか、' as name 'または 'cm with name'を使用して、インポート(関数内の' import x'を使用して 'x'をローカルにします)もっと。 –
'global'ステートメントを使ってデフォルトを上書きします。 'g()'のどこにいても 'a 'は' a'グローバルにします。 –