这是我的代码:
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
这里有什么问题?
答案 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