5

这是我的代码:

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

这里有什么问题?

4

2 回答 2

6

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

所以

案例 1)由于没有 local x,所以你得到了 global

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

x案例3)没问题,它又使用了全局

案例 4) 同案例 2

于 2013-03-20T09:37:42.293 回答
4

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

尝试 :

global x
x = x * y      
return x

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

>>> x = 12
>>> def poi():
...   x = 99
...   return x
... 
>>> poi()
99
>>> x
12
于 2013-03-20T09:28:09.133 回答