2016-02-03 8 views
1

Я определил функцию построения гистограммы. Внутри этой функции я делаю некоторый анализ данных, которые я получаю от 2 кликов на рисунке.Получение значения изнутри def()

Мой код ниже:

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

Что на самом деле происходит внутри функции все работает отлично. Но, например, из кода, если я захочу использовать caculated mean_noise в какой-то момент позже в коде, я получаю сообщение об ошибке, в котором говорится, что средний шум не определен (что правильно, потому что он не определен вне функции)

Итак, мой вопрос заключается в том, как извлечь значение mean_noise, которое я вычисляю автоматически, когда я определил hist_maker, чтобы впоследствии использовать его?

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

+0

return mean_noise или иметь глобальную переменную (объявленную за пределами области действия) – depperm

ответ

2

Простейшее решение - первая линия вашей функции должна быть:

global mean_noise 

Если затем запустить (вне функции):

hist_maker() 
print(mean_noise) 

Печать должна работать. Если вы измените порядок этих двух строк, вы получите NameError.

Обратите внимание, что это, как правило, не считается хорошим программированием. Лучшим решением в целом считается return mean_noise в конце вашей функции.

+0

Использование глобальных функций mid_noise и позволяет мне использовать это позже в коде. Однако, return mean_noise этого не делает. Позвольте мне просто проверить, что я использую это правильно. С кодом в моем вопросе, все, что я делаю, это добавить return mean_noise в конце, и всякий раз, когда я использую функцию, он должен печатать значение? Если это правильно, то a) он не печатает значение, когда я пытаюсь, и b) он просто напечатает номер и фактически не разрешит мне использовать его позже на – DavidG

+0

. Вы бы добавили 'return mean', а затем в свой код что ИСПОЛЬЗУЕТ эту функцию, вы должны написать 'mean_noise = hist_maker()' – Brian

+0

Теперь это работает отлично. Спасибо за помощь – DavidG

Смежные вопросы