首页 > 解决方案 > 无法在函数中跳出 for 循环?

问题描述

我无法解释自己,为什么我不能跳出这个循环?这是我的代码:

import json

doc="subtest12"

def traverse(d):

    for key, item in d.items():
        print(key)
        if doc.lower()==key.lower():
            print("YES")
            return 

        else:
            if isinstance(item, dict):
                #print(item)
                traverse(item)

d={"test":{"subtest11":"Hi","subtest12":"Hi"},"test2":{"subtest21":"Hi","subtest22":"Hi"},"test3":{"subtest31":"Hi","subtest32":"Hi"},"test4":{"subtest41":"Hi","subtest42":"Hi"}}

traverse(d)

在 true if 条件下,我尝试了 return 和 break。但是 bot 并没有退出 for 循环......

知道为什么吗?

标签: python

解决方案


一个简单的解决方案可能是根据条件是否满足返回一个值,以便父函数知道是退出还是继续。

def traverse(data, stop_condition='subtest12'):
    stop_condition = stop_condition.lower()

    for k, v in data.items():
        print(k)
        if stop_condition == k.lower():
            print("YES")
            # exit directly, don't check other values in parent call
            return True

        if isinstance(v, dict):
            if traverse(v):
                # exit directly, don't check other values in parent call
                return True

    # check other values in parent call, of there are any
    return False


if __name__ == '__main__':
    d = {
        "test": {
            "subtest11": "Hi",
            "subtest12":"Hi",
        },
        "test2": {
            "subtest21": "Hi",
            "subtest22": "Hi",
        },
        "test3": {
            "subtest31": "Hi",
            "subtest32": "Hi",
        },
        "test4": {
            "subtest41": "Hi",
            "subtest42": "Hi",
        },
    }

    traverse(d)

推荐阅读