У меня есть функция fun()
, которая связывает обратный вызов callback()
при щелчке по фигуре matplotlib. Я хочу, чтобы этот обратный вызов имел возможность получить доступ к переменному пространству fun()
, чтобы внести изменения. Как я могу это сделать?Область изменения обратного вызова Python
import numpy as np
import matplotlib.pyplot as plt
def callback(event):
data = event.xdata
def fun():
data = 0
fig, ax = plt.subplots()
ax.plot(np.random.rand(12), np.random.rand(12), 'go')
fig.canvas.mpl_connect('button_release_event', callback)
plt.show()
return data
print fun()
Ввод data
в global
объеме не является приемлемым решением. Функция должна быть автономной. Ответ here позволил бы мне передать переменные в callback()
, но не позволял мне редактировать их.
Используйте вложенную функцию (определите свой обратный вызов в теле удовольствия). Но обратите внимание, что функция fun будет уже завершена при вызове callback. –
Я уже пробовал вложенную функцию в '' 'fun()' '': она не работает. Вложенный '' 'callback()' '' может получить доступ к области '' 'fun()' '', но не может ее изменить. Попробуйте сами. Кроме того, обычно функция не заканчивается до тех пор, пока не будет разрешен '' 'plt.show()' '' (т. Е. После взаимодействия с холстом). У меня нет проблем с преждевременным завершением в приведенном выше скрипте. – SkyNT
На самом деле вы можете, используя трюк litte. См. Http://stackoverflow.com/questions/6198709/how-do-i-change-nesting-functions-variable-in-the-nested-function. Вы можете использовать dict, например d = dict (data = 0), а затем изменить d ["data"] в вложенной функции. –