0
我是一名在Python中编程的业余爱好者。最近,我发现了一个关于函数局部变量的问题。下面是我的示例代码:Python中的局部变量
"""
Scenario-1:
"""
a=4
def g(x):
#global a
#a=a+2
print(a)
return x+a
当我输入控制台
g(2)
(我用Enthought雨棚),它返回:
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
----无可厚非。但是,当我键入一个在控制台输入,则返回:
4
这才是我的第二个问题,在全局变量:
我宣布要在函数g全局(X),为什么变量a没有变为6 = 4 + 2(根据a = a + 2)?我认为当变量a是所谓的“全局”时,函数内部函数的变化将导致函数的外部变化,这是在main()中。我错了吗?
以上是我的两个基本问题。非常感谢你!
谢谢@sapam编辑我的文本和代码!我必须在下次自己制作 –
*绑定*决定了范围。作业是一种绑定形式;因为你在'g()'中赋予'a',所以它被确定为本地。绑定的其他动作是导入(在函数内部使用'import x'使得'x'成为本地),在'for'中使用名称作为目标,或者'除了名称'为''或'cm作为名称',并且更多。 –
使用'global'语句覆盖默认值。 'g()'中的任意位置的'global a'都会使'a'再次成为全局的,即使你绑定了它。 –