2016-07-01 18 views
0

私はPythonでプログラミングを楽しんでいるアマチュアです。最近、関数のローカル変数に関する質問がありました。 Pythonのローカル変数

""" 
Scenario-1: 
""" 
a=4 

def g(x): 
    #global a 
    #a=a+2 
    print(a) 
    return x+a 

私はコンソールでg(2)を入力

(私はEnthoughtキャノピーを使用しています)、それは返さない:間違っ

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つの基本的な質問です。どうもありがとうございました!

+0

私のテキストとコードを編集していただきありがとうございます!私は次回に自分で作ってください –

+0

*バインディング*によって範囲が決まります。代入は束縛の一形態です。あなたが 'g()'の 'a'に代入するので、ローカルであると判断されます。バインドする他のアクションは、 'for'でターゲットとして名前を使用するか、' as name 'または 'cm with name'を使用して、インポート(関数内の' import x'を使用して 'x'をローカルにします)もっと。 –

+0

'global'ステートメントを使ってデフォルトを上書きします。 'g()'のどこにいても 'a 'は' a'グローバルにします。 –

答えて

0

(1)グローバル変数を宣言せずに参照することができます。しかし、に値を代入したい場合は、グローバル宣言が必要です。に値を割り当てます。

関連する問題