我有一个函数fun()
,在单击matplotlib图时绑定回调callback()
。我希望此回调能够访问fun()
的变量空间以进行更改。我怎么能这样做呢?
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()
,但不允许我编辑它们。
答案 0 :(得分:2)
我知道您希望有一些状态,可以在运行时更改。一个选项可能是使用一个可调用的对象,这不是一个函数(我还没有测试过它):
class Callback(object):
def __init__(self, data):
self.data = data
def __call__(self, event):
# Manipulate the data
self.data += 1
...
datacallback = Callback(0)
fig.canvas.mpl_connect('button_release_event', datacallback)
print datacallback.data
这样我们就会有一个计数器提出事件的频率。但它适用于任何类型的数据,也比整数更复杂。