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

python : local variable is referenced before assignment

本问题已经有最佳答案,请猛点这里访问。

这是我的代码:

1
2
3
4
5
6
7
8
9
x = 1
def poi(y):
        # insert line here

def main():
    print poi(1)

if __name__ =="__main__":
    main()

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

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

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

但是,

1
2
x = x*y      
return x

这给了

1
error : local variable 'x' is reference before assignment

这里怎么了?


当python看到您要分配给x时,它强制它是一个局部变量名。现在在该函数中看不到全局x(除非使用global关键字)

所以

案例1)由于没有本地的x,你可以得到

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

案例3)没问题,它又在使用全球x

案例4)与案例2相同


当您想要访问一个全局变量时,您可以只通过它的名称访问它。但是如果你想改变它的值,你需要使用关键字global

尝试:

1
2
3
global x
x = x * y      
return x

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

1
2
3
4
5
6
7
8
9
>>> x = 12
>>> def poi():
...   x = 99
...   return x
...
>>> poi()
99
>>> x
12