2016-07-01 84 views
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()中。我错了吗?

以上是我的两个基本问题。非常感谢你!

+0

谢谢@sapam编辑我的文本和代码!我必须在下次自己制作 –

+0

*绑定*决定了范围。作业是一种绑定形式;因为你在'g()'中赋予'a',所以它被确定为本地。绑定的其他动作是导入(在函数内部使用'import x'使得'x'成为本地),在'for'中使用名称作为目标,或者'除了名称'为''或'cm作为名称',并且更多。 –

+0

使用'global'语句覆盖默认值。 'g()'中的任意位置的'global a'都会使'a'再次成为全局的,即使你绑定了它。 –

回答

0

(1)您可以在不声明的情况下引用全局变量。但是,如果您想要分配值,则Python需要全局声明。