从 def() 内部获取值
Obtaining a value from inside a def()
我定义了一个绘制直方图的函数。在这个函数中,我正在对我从图形上单击 2 次获得的数据进行一些分析。
我的代码如下:
def hist_maker():
heights,edges = np.histogram(data, 1000)
edges = edges[:-1]+(edges[1]-edges[0])
fig, ax = plt.subplots()
ax.plot(edges,heights) # plot histogram
plt.yscale('log', nonposy='clip')
ax.set(title=titl, xlabel='ADC Value(DN/40)', ylabel='Frequency')
point1, point2 = fig.ginput(2) # get input from 2 clicks on figure
ax.axvspan(point1[0], point2[0], color='red', alpha=0.5) # paint selected area in red
mask = (edges>point1[0]) & (edges<point2[0])
# calculate which values are selected and display mean
fig.text(0.2,0.84,'Mean: ' + str((sum(edges[mask]*heights[mask])/sum(heights[mask]))))
mean = sum(edges[mask]*heights[mask])/sum(heights[mask])
mean_noise = edges[heights.argmax() # Find the x value corresponding to the max y value
fig.text(0.2,0.8,'Std: ' + str(g))
函数内部实际发生的一切工作正常。但是,例如,如果我想在代码稍后的某个时间点使用计算的 mean_noise
,我会收到一个错误,指出未定义均值噪声(这是正确的,因为它未定义在函数之外)
所以我的问题是如何提取我定义hist_maker时自动计算的mean_noise的值,以便我以后可以使用它?
解决此问题的一种方法是摆脱函数 hist_maker 并为我正在绘制的每个直方图重复内部代码,我确信它会起作用。但是当我绘制多个直方图时,我认为定义一个函数然后为每个直方图继续调用它会更容易。
最简单的解决方案 - 函数的第一行应该是:
global mean_noise
如果你那么运行(函数外):
hist_maker()
print(mean_noise)
打印应该可以。如果您颠倒这两行的顺序,您将得到 NameError
.
但是请注意,这通常不被认为是好的编程。通常认为更好的解决方案是在函数末尾 return mean_noise
。
我定义了一个绘制直方图的函数。在这个函数中,我正在对我从图形上单击 2 次获得的数据进行一些分析。
我的代码如下:
def hist_maker():
heights,edges = np.histogram(data, 1000)
edges = edges[:-1]+(edges[1]-edges[0])
fig, ax = plt.subplots()
ax.plot(edges,heights) # plot histogram
plt.yscale('log', nonposy='clip')
ax.set(title=titl, xlabel='ADC Value(DN/40)', ylabel='Frequency')
point1, point2 = fig.ginput(2) # get input from 2 clicks on figure
ax.axvspan(point1[0], point2[0], color='red', alpha=0.5) # paint selected area in red
mask = (edges>point1[0]) & (edges<point2[0])
# calculate which values are selected and display mean
fig.text(0.2,0.84,'Mean: ' + str((sum(edges[mask]*heights[mask])/sum(heights[mask]))))
mean = sum(edges[mask]*heights[mask])/sum(heights[mask])
mean_noise = edges[heights.argmax() # Find the x value corresponding to the max y value
fig.text(0.2,0.8,'Std: ' + str(g))
函数内部实际发生的一切工作正常。但是,例如,如果我想在代码稍后的某个时间点使用计算的 mean_noise
,我会收到一个错误,指出未定义均值噪声(这是正确的,因为它未定义在函数之外)
所以我的问题是如何提取我定义hist_maker时自动计算的mean_noise的值,以便我以后可以使用它?
解决此问题的一种方法是摆脱函数 hist_maker 并为我正在绘制的每个直方图重复内部代码,我确信它会起作用。但是当我绘制多个直方图时,我认为定义一个函数然后为每个直方图继续调用它会更容易。
最简单的解决方案 - 函数的第一行应该是:
global mean_noise
如果你那么运行(函数外):
hist_maker()
print(mean_noise)
打印应该可以。如果您颠倒这两行的顺序,您将得到 NameError
.
但是请注意,这通常不被认为是好的编程。通常认为更好的解决方案是在函数末尾 return mean_noise
。