1. ホーム
  2. python

Pythonでグローバル変数への代入がうまくいかないのはなぜですか?

2023-08-10 05:45:50

質問

Pythonのscopingルールを理解するのに大変苦労しています。

以下のスクリプトで。

a = 7

def printA():
    print "Value of a is %d" % (a)

def setA(value):
    a = value
    print "Inside setA, a is now %d" %(a)


print "Before setA"
printA()
setA(42)
print "After setA"
printA()

という(私にとっては)予想外の出力をします。

    setA の前に
    aの値は7
    setA の内部では、a は現在 42 です。
    setAの後
    aの値は7

ここで、私はaの値の最後の印刷が7ではなく、42であることを期待します。Pythonのグローバル変数のスコープルールについて、私は何を見逃しているのでしょうか?

どのように解決するのですか?

グローバル変数は特殊です。 もし、変数に代入しようとすると a = value に代入しようとすると、たとえ同じ名前のグローバル変数があったとしても、関数の中に新しいローカル変数が作られます。 代わりにグローバル変数にアクセスするには global ステートメント を関数内に記述します。

a = 7
def setA(value):
    global a   # declare a to be a global
    a = value  # this sets the global value of a

参照 ネーミングとバインディング を参照してください。