我有以下函数对人名执行 fuzzymatching 。它需要一本字典,其中的键是我匹配的名称。创建字典的成本很高,我将在笔记本中使用该函数,其中可能已经创建了字典......所以我想保留每次运行该函数时不创建它的选项。为此,我将其默认为“无”,以便在需要时可以传递它。如果我还没有初始化它,它会自行初始化。
请注意,get_player_dict()
是返回字典的函数:
def match_player_names(input_name, player_dict=None):
matches = []
if player_dict:
for player in list(map(lambda player: player.lower(), player_dict.keys())):
if fuzz.partial_ratio(input_name, player) > 75:
matches.append(player)
else:
match_player_names(input_name, player_dict=get_player_dict())
return matches
这不会返回任何内容( matches
是 []
)。但是,如果我只是复制/粘贴 True
条件中的代码并用字典的初始化替换递归,它就可以正常工作(如下所示):
else:
for player in list(map(lambda player: player.lower(), player_dict.keys())):
if fuzz.partial_ratio(input_name, player) > 75:
matches.append(player)
有什么想法为什么递归不起作用?
最佳答案
您没有捕获 else
语句内调用的返回值,因此 matches
仍为空。
else:
matches = match_player_names(input_name, player_dict=get_player_dict())
或者简单地
else:
return match_player_names(input_name, player_dict=get_player_dict())
关于python - 递归函数在 False 条件下运行返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65914127/