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
怎么了?
如果要更改函数内部的全局变量,则应使用global
关键字:
a = 4
def foo(x):
global a
a = 10
foo(2)
print(a) # prints 10
另见:
怎么了?
在第一种情况下,您有两个不同的变量名为a
:一个 ( a = 10
) 是函数作用域的一部分,只能从函数内部访问。该变量在函数返回后被删除。另一个变量 ( a = 4
) 是外部(全局)范围的一部分,不会受到任何影响。
在第二个片段中,只有一个变量a
。此变量在全局范围内,但也可以从函数内部访问(读取)。但是,它不能从函数内部更改。