Почему моя переменная не доступна после функции? - PullRequest
0 голосов
/ 07 марта 2020

Я не могу понять, почему моя функция не предоставляет изменения переменных после того, как я выполню функцию. Или почему переменные доступны после функции. Мне предоставили фрейм данных и объяснили функцию столбца для сравнения. Я хочу, чтобы функция включала совпадающие значения исходного фрейма данных и создала отдельный фрейм данных, чтобы я мог видеть только совпадения. Когда я запускаю код, я могу увидеть кадр данных и соответствующий кадр данных после запуска функции, но когда я попытался вызвать соответствующий кадр данных после python, он не распознает переменную как define, и исходный кадр данных не изменяется, когда я смотрю на это снова. Я пытался вызвать их как глобальные переменные в начале функции, но это тоже не сработало.

def scorer_tester_function(dataframe, score_type, source, compare, limit_num):
    match = []
    match_index = []
    similarity = []
    org_index = []
    match_df = pd.DataFrame()

    for i in zip(source.index, source):
        position = list(source.index)
        print(str(position.index(i[0])) + " of " + str(len(position)))
        if pd.isnull(i[1]):
            org_index.append(i[0])
            match.append(np.nan)
            similarity.append(np.nan)
            match_index.append(np.nan)
        else:
            ratio = process.extract( i[1], compare, limit=limit_num,
                                     scorer=scorer_dict[score_type])
            org_index.append(i[0])
            match.append(ratio[0][0])
            similarity.append(ratio[0][1])
            match_index.append(ratio[0][2])
    match_df['org_index'] = pd.Series(org_index)
    match_df['match'] = pd.Series(match)
    match_df['match_index'] = pd.Series(match_index)
    match_df['match_score'] = pd.Series(similarity)
    match_df.set_index('org_index', inplace=True)
    dataframe = pd.concat([dataframe, match_df], axis=1)
    return match_df, dataframe

Я вызываю список функций так:

scorer_tester_function(df_ven, 'WR', df_ven['Name 1'].sample(2), df_emp['Name 2'], 1)

Я ожидаю, что у меня будет доступ к match_df и def_ven, и я смогу просматривать и дополнительно манипулировать этими переменными, но при вызове исходного кадра данных df_ven не изменяется, а match_df возвращает переменную, не определенную как ошибку.

1 Ответ

1 голос
/ 07 марта 2020

return не вводит локальные переменные в область вызова; вызов функции оценивается по их значениям.

Если вы напишите

a, b = scorer_tester_function(df_ven, 'WR', df_ven['Name 1'].sample(2), df_emp['Name 2'], 1)

, тогда a будет иметь значение match_df внутри функции, а b будет иметь значение dataframe, но имена match_df и dataframe go выходят из области видимости после возврата из функции; они не существуют вне его.

...