如何摆脱Python中的多个循环?
鉴于以下代码(不起作用):
while True:
#snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok == "y" or ok == "Y": break 2 #this doesn't work :(
if ok == "n" or ok == "N": break
#do more processing with menus and stuff
有没有办法做到这一点? 或者我有做一个检查来突破输入循环,然后另一个更有限的检查外部循环,以便在用户满意的情况下一起分解出来吗?
Edit-FYI: get_input是我写的一个简短函数,它支持显示提示和默认值以及所有这些fanciness并返回stdin.readline().strip()
我的第一本能是将嵌套循环重构成一个函数,并使用return
来分解。
PEP 3136建议标记为中断/继续。 Guido拒绝了它,因为“代码如此复杂以至于不需要这个功能”非常罕见。 虽然PEP确实提到了一些解决方法(例如异常技术),但在大多数情况下,Guido认为重构使用return会更简单。
这是另一种简短的方法。 缺点是你只能打破外部循环,但有时它正是你想要的。
for a in xrange(10):
for b in xrange(20):
if something(a, b):
# Break the inner loop...
break
else:
# Continue if the inner loop wasn't broken.
continue
# Inner loop was broken, break the outer.
break
(这里是旁观者编辑,因为我们在looong时间里没有看到@yak。)
关键的洞察力:它看起来好像外层循环总是中断。 但是如果内部循环没有中断,那么外部循环也不会。
continue
声明是这里的魔力。 它在for-else子句中。 根据定义,如果没有内部突破,就会发生这种情况 在这种情况下continue
巧妙地规避外休息。