Python递归函数在返回时不执行外部循环的其余部分

2024-03-28 16:26:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从字典中获取所有的key、val对,我的目标是当key-value对与某个值匹配时从函数返回true,如果没有匹配则返回false。我观察到在递归调用中使用“return”时,“for”循环会导航到最内层的循环,但会在那里停止,并且不会执行其余的外层循环。不知道为什么?根据递归的概念,它们应该。我错过了什么

下面是代码片段

resp = ' { "name": "Stuart", "response" : { "age" : "27", "weight" : "50"}, "address" : "New York" }'
response = json.loads(resp)

def recursive_loop(response):
    for key, value in response.items():
        if type(value) is dict:
            return recursive_loop(value)  
        elif key == "address" and value == "New York":
            print ("Match")
            return True
        else:
            print (value)
    return False
    
z = recursive_loop(response)
print (z)

我得到的输出:

Stuart
27
50
False

我期望的结果是:

Stuart
27
50
Match
True

Tags: keylooptruenewforreturnvalueaddress
3条回答

只有当递归返回True时,才希望从循环中提前返回。另一方面,您希望继续循环并检查其余值,以防其中一个值满足您的条件。要以最小的更改完成此操作,只需添加一个条件来测试递归调用的结果

def recursive_loop(response):
    for key, value in response.items():
        if type(value) is dict:
            if recursive_loop(value):
                return True
        elif key == "address" and value == "New York":
            return True
    return False

这将导致深度优先搜索,并在首次发现真实情况时返回

return停止函数的执行,无论递归或它处于循环中,因此无法恢复

您可能需要查看yield

返回函数就是问题所在。努力

相关问题 更多 >