python - 无法在函数中跳出 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 循环......
知道为什么吗?
解决方案
一个简单的解决方案可能是根据条件是否满足返回一个值,以便父函数知道是退出还是继续。
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)
推荐阅读
- ios - 需要在 swift 中构建类似 Instagram 的文本功能
- javascript - 改进 javascript 数字舍入
- vba - 如何使用 VBA 宏从 Web 服务器下载文件并将其保存到特定位置?
- git-bash - 将文件移动到 Git Bash 上的另一个文件夹
- android - 禁止访问二进制存储库
- node.js - Selenium docker 视频不能通过 network_mode 作为 docker-compose 中的主机工作
- ios - 如果用户更改付款方式,则不会调用 paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
- node.js - 编译失败怎么办?
- tkinter - 当我按下按钮时 GUI 没有关闭
- python - 正则表达式匹配 Python 中的双引号字符串