更新:让我澄清一下究竟是什么如此令人困惑。如果我添加这样的打印语句:
def recur(lis, json, target):
if lis[0] == target:
print(json[tagert])
return json[target]
else:
recur(lis[1:], json[lis[0]], target)
我的打印语句将显示 JSON 的预期值。我不知道如何表达这句话。鉴于 return 语句之前的行给出了我期望的结果(else 中没有 return 语句)为什么 else 中的 return 语句是必要的?
对于那些坚持反对这一点的人,我已经多次查看了有关缺少 return 语句的问题。其中任何一个从未得到回答的是为什么需要返回。随心所欲地对我投反对票,但至少要明白你在投反对票一个好问题。我认为这个社区正在成熟,但显然没有。
因此,我查看了几个与我的标题相同的问题,但我仍然不太明白为什么会这样。
如果我有这样的递归函数:
def recur(lis, json, target):
if lis[0] == target:
return json[target]
else:
return recur(lis[1:], json[lis[0]], target)
我按预期获得了返回值。
但是如果我不在 else 语句中返回 the,我会得到一个 None:
def recur(lis, json, target):
if lis[0] == target:
return json[target]
else:
recur(lis[1:], json[lis[0]], target)
>>> final_json = recur(my_list, my_json, 'ID')
>>> print(final_json)
None
这是特定于 Python 的吗?我有点生疏,但我似乎记得像 Haskell 这样的语言更优雅地处理这个问题,我相信,我不需要返回递归调用的值。这对我来说更有意义 - 我不需要所有中间值,因为我在堆栈的每个级别传递我的函数所需的所有值。我在这里缺少什么?
倚天杖
相关分类