2015-07-25 3 views
1

Я звоню функцию obtainingparams рекурсивно и требуют, чтобы значение для residuals, tau_1 и tau_2, в коде ниже, от каждого вызова хранится где-то, так что я могу затем сравнить значения, связанные с каждым вызовом функции. Однако я не слишком уверен, как это сделать.Сохранение значения от вызова рекурсивной функции

def obtainingparams(self, df, tau_1, tau_2, residuals): 
    print('Calculate the yields Matrix and matrix_of_params in this part') 

    params = np.linalg.lstsq(matrix_of_params,yields) 
    residuals = np.sqrt(((yields - matrix_of_params.dot(params))**2).sum()) 
    tau_1 = tau_1 + 0.2 
    tau_2 = tau_2 + 0.2 

    #Checkin how many times the function has been called via a decorator not included in this code 
    while self.obtainingparams(self, df, tau_1, tau_2, residuals).called < 5: 
     self.obtainingparams(self, df, tau_1, tau_2, residuals) 

Спасибо

ответ

1

Вы можете сделать это немного грязный способ с помощью глобального списка. Аргументы первого вызова будет в значениях [0], то второй вызов значений [1] и т.д.

values = [] 

def obtainingparams(self, df, tau_1, tau_2, residuals): 
    global values 

    print('Calculate the yields Matrix and matrix_of_params in this part') 

    params = np.linalg.lstsq(matrix_of_params,yields) 
    residuals = np.sqrt(((yields - matrix_of_params.dot(params))**2).sum()) 
    tau_1 = tau_1 + 0.2 
    tau_2 = tau_2 + 0.2 

    values.append((tau1, tau2, residuals)) 

    #Checkin how many times the function has been called via a decorator not included in this code 
    while self.obtainingparams(self, df, tau_1, tau_2, residuals).called < 5: 
     self.obtainingparams(self, df, tau_1, tau_2, residuals) 

С точки зрения дизайна, я не уверен, что при использовании рекурсии является лучшим здесь, если вы действительно хотите отслеживать параметры, используемые с каждым вызовом.

+0

Как я мог это сделать, если бы я не хотел использовать рекурсию? – user131983

+1

У меня, вероятно, были бы 'getparams' return' tau_1', 'tau_2' и' остатки', а затем вызывать их в цикле. Вам все равно нужен список для отслеживания параметров, используемых каждый раз. Каждая итерация цикла, вы бы назвали 'getparams' последним элементом в списке. То, как вы делаете это сейчас, отлично, но вы не получаете много преимуществ от рекурсии. – ezig