访问用户定义函数中的全局帧

时间:2013-09-18 21:50:35

标签: python function frame

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没有任何反应。发生了什么事?

2 个答案:

答案 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。此变量位于全局范围内,但也可以从函数内部访问(读取)。但是,它无法从函数内部进行更改。