Во время работы над курсом Intro to data analysis на Udacity я наткнулся на следующее. При написании функции ниже я не понимал, что я назвал вспомогательную функцию standardize(series)
такой же, как и основная функция standardize(df)
. К моему удивлению, функция отлично работала.Функция помощника с тем же именем, что и основная функция?
Как интерпретатор знает, какую версию функции стандартизации использовать, когда я использую ее в df.apply(standardize)
? Имеет ли это какое-либо отношение к классу аргумента (серия vs df)? Почему он не пытается использовать рекурсию? Или, если это так, я не могу понять, как это работает шаг за шагом.
grades_df = pd.DataFrame(
data={'exam1': [43, 81, 78, 75, 89, 70, 91, 65, 98, 87],
'exam2': [24, 63, 56, 56, 67, 51, 79, 46, 72, 60]},
index=['Andre', 'Barry', 'Chris', 'Dan', 'Emilio',
'Fred', 'Greta', 'Humbert', 'Ivan', 'James']
)
def standardize(df):
'''
Fill in this function to standardize each column of the given
DataFrame. To standardize a variable, convert each value to the
number of standard deviations it is above or below the mean.
'''
def standardize(series):
return (series - series.mean())/series.std(ddof = 0)
return df.apply(standardize)
standardize(grades_df)
Вложенная функция затеняет ту, в которой она вложена. Он будет работать нормально, но кажется излишне запутанным. – jonrsharpe
, в качестве рекомендации вы можете вместо этого называть внутреннюю функцию '_standardize'. Это моя нормальная конвенция. –