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

我不太明白这两者的行为有何不同。第二个,全局变量明显影响局部变量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

怎么了?

在第一种情况下,您有两个不同的变量名为a:一个 ( a = 10) 是函数作用域的一部分,只能从函数内部访问。该变量在函数返回后被删除。另一个变量 ( a = 4) 是外部(全局)范围的一部分,不会受到任何影响。

在第二个片段中,只有一个变量a。此变量在全局范围内,但也可以从函数内部访问(读取)。但是,它不能从函数内部更改。

于 2013-09-18T21:59:28.550 回答