Python:numpy与matplotlib异常
这是我第一次使用matplotlib和numpy。
下面是我遇到的问题:
如果我在Python命令行里运行,代码可以正常工作。这个代码是:
>>> from numpy import *
>>> y = array([1,2])
>>> y = append(y, y[len(y) - 1]+1)
>>> y
array([1, 2, 3])
但是如果我在脚本中使用matplotlib,就会出现这个错误。
line 26, in onkeypress
y = append(y, y[len(y) - 1]+1)
UnboundLocalError: local variable 'y' referenced before assignment
这是我的脚本:
from matplotlib.pyplot import figure, show
from numpy import *
figzoom = figure()
axzoom = figzoom.add_subplot(111, xlim=(0,10), ylim=(0, 10),autoscale_on=True)
x = array([1, 2 ])
y = array([1, 10 ])
def onkeypress(event):
if event.key == "up":
y = append(y, y[len(y) - 1]+1)
x = append(x, x[len(x) - 1] )
axzoom.plot(x,y)
我试着把数据“添加”到另一个数组,比如y1,然后用y = y1.copy()来复制。但是我还是遇到同样的错误。我是不是漏掉了什么简单的东西???!!!
3 个回答
2
除非你在你的 onkeypress()
函数里加上 global y
,否则你在函数里使用的 y
只是这个函数内部的一个局部变量。也就是说,你在定义这个局部变量的时候,不能在赋值语句的右边使用 y
。
2
如果你把这些变量改成全局变量,可能就能正常工作了。
def onkeypress(event):
global y, x
...
3
当你在一个函数里面给一个变量赋值时,Python 会创建一个新的变量,这个变量的作用范围是局部的,也就是说它只在这个函数里面有效。而这个新的变量会把全局变量给“遮住”。
所以,在 onkeypress 函数里面的 x 和 y 只是这个函数内部的变量。从 Python 的角度来看,它们是没有被初始化的,所以就会出现错误。
正如 GWW 提到的,声明 x 和 y 为全局变量就能解决这个问题。另外,如果你没有给 x 和 y 赋新的值,而只是使用它们之前的值,那么这些值就会指向全局的 x 和 y。