python:在赋值之前引用局部变量

时间:2013-03-20 09:24:39

标签: python

这是我的代码:

x = 1
def poi(y):
        # insert line here

def main():
    print poi(1)

if __name__ == "__main__":
    main()

如果放置了4行,则一次放置一行,代替# insert line here

 Lines         | Output
---------------+--------------
1. return x    | 1 
2. x = 99      |
   return x    | 99
3. return x+y  | 2 
4. x = 99      | 99  

在上面的行中,似乎在案例1和3中使用了上面声明的全局x

但是,

x = x*y      
return x

这给出了

error : local variable 'x' is reference before assignment

这里有什么问题?

2 个答案:

答案 0 :(得分:5)

当Python看到您分配给x时,它会强制它成为本地变量名。现在,无法在该函数中看到全局x(除非您使用global关键字)

所以

案例1)由于没有本地x,您将获得全局

案例2)您要分配给本地x,因此所有对函数中x的所有引用都是本地的

案例3)没问题,它再次使用全局x

案例4)与案例2相同

答案 1 :(得分:3)

如果要访问全局变量,只需按名称访问即可。但是,如果要更改其值,则需要使用关键字global

尝试:

global x
x = x * y      
return x

在情况2中,x被创建为局部变量,从不使用全局x。

>>> x = 12
>>> def poi():
...   x = 99
...   return x
... 
>>> poi()
99
>>> x
12