为什么我的变量在功能后无法访问?

时间:2020-03-07 16:57:31

标签: python pandas function return

执行完函数后,我不知道为什么函数没有提供对变量的更改。还是为什么在函数后可以访问变量。我提供了一个数据框,并告诉功能列进行比较。我希望函数包含匹配值是原始数据框,并创建一个单独的数据框,我只能看到匹配项。当我运行代码时,我可以在运行函数后看到数据框和匹配的数据框,但是当我尝试在python无法将变量识别为定义并且在查看它时未修改原始数据框之后调用匹配的数据框时,再次。我试图在函数开始时将它们都称为全局变量,但这也不起作用。

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 个答案:

答案 0 :(得分:1)

class Father { dynamic func makeMoney() { print("make money") } } extension Father { @_dynamicReplacement(for: makeMoney()) func swizzle_makeMoney() { print("have a rest and make money") } } Father().makeMoney() // have a rest and make money 不会将局部变量注入调用者的作用域;它使函数调用求值。

如果你写

return

然后,a, b = scorer_tester_function(df_ven, 'WR', df_ven['Name 1'].sample(2), df_emp['Name 2'], 1) 在函数内部将具有a的值,而match_df将具有b的值,但是名称函数返回后,dataframematch_df超出范围;它们不存在。