我是一名在Python中学习编程的业余爱好者。最近,我发现了一个关于函数局部变量的问题。这是我的示例代码:
"""
Scenario-1:
"""
a=4
def g(x):
#global a
#a=a+2
print(a)
return x+a
当我在控制台中键入g(2)
时(我正在使用Enthought Canopy),它会返回:
4
6
----没错。
然后我将代码更改为("#"
之前删除"a=a+2")
:
"""
Scenario-2:
"""
a=4
def g(x):
#global a
a=a+2
print(a)
return x+a
然后重新运行代码并输入g(2)
,它显示:
*UnboundLocalError: local variable 'a' referenced before assignment*
我的第一个问题是:在场景-1中,当我返回x+a
时,为什么在分配之前没有引用错误?
此外,我将代码更改为:
"""
Scenario-3:
"""
a=4
def g(x):
global a
a=a+2
print(a)
return x+a
然后我重新运行代码并输入g(2)
,它返回:
6
8
----没错。但是,当我输入a并进入控制台时,它会返回:
4
这是我的第二个问题,关于全局变量:
因为我声明a在函数g(x)中是全局的,为什么变量a没有变为6 = 4 + 2(根据a = a + 2)?我认为当变量a被称为" global"时,函数内部的值变化将导致函数外部的变化,即main()。我错了吗?
以上是我的两个基本问题。非常感谢你!
答案 0 :(得分:0)
(1)您可以引用全局变量而不声明它。但是,如果要分配值,Python需要全局声明。