【问题标题】:Recursive function run on False condition returning None [duplicate]递归函数在返回 None 的 False 条件下运行 [重复]
【发布时间】:2021-04-30 23:47:36
【问题描述】:

我有以下函数在人名上执行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)

任何想法为什么递归不起作用?

【问题讨论】:

    标签: python python-3.x recursion


    【解决方案1】:

    您没有从 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()) 
    

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 1970-01-01
      • 2020-06-25
      • 2020-07-10
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      相关资源
      最近更新 更多