我正在尝试学习在递归函数中使用yield和return。我有一个嵌套字典,我正在寻找一个特定的值。
使用“yield”时,以下函数运行正常并成功返回找到的值:
def findvalue (value, document):
if isinstance (document, list):
for d in document:
for result in findvalue(value, d):
yield result
if isinstance (document, dict):
for k,v in document.items():
if v == value:
yield v
elif isinstance (v, dict):
for result in findvalue(value, v):
yield result
elif isinstance (v, list):
for d in v:
for result in findvalue(value, d):
yield result
我理解生成器如何工作以及为什么yield会在上面的代码中完成它的作用。现在,如果我使用相同的代码,但返回并在那里检查空返回,我仍然会遇到“NoneType”迭代问题,因为在这个代码中返回一个空结果:
def valuefind (value, document):
if isinstance (document, list):
for d in document:
for result in valuefind(value, d):
if result is not None:
return result
if isinstance (document, dict):
for k, v in document.items():
if v == value:
return v
elif isinstance (v, dict):
for result in valuefind(value, v):
if result is not None:
return result
elif isinstance (v, list):
for d in value:
for result in valuefind(value, d):
if result is not None:
return result
我在这里缺少什么?
答案 0 :(得分:0)
我相信你可以改变这个:
for result in valuefind(value, v):
if result is not None:
return result
对此:
return valuefind(value, v)