2
a = 4
def foo(x):
    a = 10
foo(2)
print(a)
#prints 4

上記のコードは変更されませんa

a = 4
def foo(x):
   return a + x
result = foo(10)
print(result)
#prints out 14

この 2 つの動作の違いがよくわかりません。2 つ目は、グローバル変数がローカル変数に明らかに影響しますfoo。しかし、a内の最初のものを変更しても、グローバル フレームにはfoo何も起こりません。a何が起こっている?

4

2 に答える 2

4

関数内のグローバル変数を変更globalする場合は、次のキーワードを使用する必要があります。

a = 4
def foo(x):
    global a
    a = 10
foo(2)
print(a)  # prints 10

以下も参照してください。

于 2013-09-18T21:52:21.013 に答える
3

何が起こっている?

最初のケースでは、 という名前の 2 つの異なる変数がありますa。1 つの ( a = 10) は関数のスコープの一部であり、関数内からのみアクセスできます。この変数は、関数が戻った後に削除されます。もう 1 つの変数 ( a = 4) は外部 (グローバル) スコープの一部であり、まったく影響を受けません。

2 番目のスニペットには、変数が 1 つだけありますa。この変数はグローバル スコープにありますが、関数内からアクセス (読み取り) することもできます。ただし、関数内から変更することはできません。

于 2013-09-18T21:59:28.550 に答える