执行完函数后,我不知道为什么函数没有提供对变量的更改。还是为什么在函数后可以访问变量。我提供了一个数据框,并告诉功能列进行比较。我希望函数包含匹配值是原始数据框,并创建一个单独的数据框,我只能看到匹配项。当我运行代码时,我可以在运行函数后看到数据框和匹配的数据框,但是当我尝试在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返回变量未定义的错误。
答案 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
的值,但是名称函数返回后,dataframe
和match_df
超出范围;它们不存在。