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
没有任何反应。发生了什么事?
答案 0 :(得分:3)
如果您想在函数内更改全局变量,则应使用global
关键字:
a = 4
def foo(x):
global a
a = 10
foo(2)
print(a) # prints 10
另见:
答案 1 :(得分:3)
发生了什么事?
在第一种情况下,您有两个名为a
的变量:一个(a = 10
)是函数范围的一部分,只能从函数内部访问。函数返回后删除此变量。另一个变量(a = 4
)是外部(全局)范围的一部分,不受任何影响。
在第二个代码段中,只有一个变量a
。此变量位于全局范围内,但也可以从函数内部访问(读取)。但是,它无法从函数内部进行更改。