python - 递归函数在 False 条件下运行返回 None

标签 python python-3.x recursion

我有以下函数对人名执行 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/

相关文章:

python - TensorFlow 中的矩阵范数

python - 如何将 namedtuple 生成的元组子类转换为元组本身?

python - 如何将两个列表中的每个元素与其他列表中的每个元素进行比较,然后将结果合并到一个字符串中

python-3.x - 使用python从屏幕像素中获取RGB值

xml - 如何为自相似 XML 树编写递归 XSD 模式?

swift - 您如何利用 Swift 特性来重构这个递归函数?

python - 是否可以在不使用 sleep 条件的情况下使 gRPC 服务器保持事件状态?

python - while循环测试

Python Matplotlib X轴标签双轴与数据框

java - 如何让我的数组正确排序?递归排序