Python: аномалия NumPy и Matplotlib - PullRequest
       3

Python: аномалия NumPy и Matplotlib

1 голос
/ 30 сентября 2010

Это первый раз, когда я использую matplotlib и numpy.

Здесь возникает проблема:

Если я перейду к python cli, предполагаемый код работает нормально.Вот этот код

>>> 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 ]

3 голосов
/ 30 сентября 2010

Когда вы присваиваете переменную внутри функции, python создает новую переменную с локальной областью действия, и эта новая переменная также скрывает глобальную переменную.

Итак, x и y внутри onkeypress являются локальными для функции. Следовательно, с точки зрения питона, они неинициализированы, и, следовательно, ошибка.

Как указывает GWW - объявление x, y как глобального решит проблему. Кроме того, если вы не назначаете x, y какое-либо новое значение, а используете только их ранее существующее значение, эти значения будут ссылаться на глобальные x, y.

2 голосов
/ 30 сентября 2010

Если вы не включите global y в свою функцию onkeypress(), y, который вы назначаете, имеет локальную область действия для функции. Вы не можете использовать y справа от оператора присваивания, в котором вы определяете локальную переменную.

2 голосов
/ 30 сентября 2010

Это может сработать, если вы измените переменные на глобальные

def onkeypress(event):
    global y, x
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...