给定以下代码(不起作用):
while True:
# Snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok.lower() == "y": break 2 # This doesn't work :(
if ok.lower() == "n": break
# Do more processing with menus and stuff
有办法解决这个问题吗?还是我必须先检查一次,跳出输入循环,然后再检查一次,如果用户满意,再跳出外部循环?
另一种将迭代减少到单层循环的方法是使用生成器,这也在python参考中指定
for i, j in ((i, j) for i in A for j in B):
print(i , j)
if (some_condition):
break
您可以将它扩展到循环的任意级别
缺点是您不能再只打破单个级别。要么全有,要么全无。
另一个缺点是它不能与while循环一起工作。我最初想在Python上发布这个答案-“break”跳出所有循环,但不幸的是,它被关闭为这个循环的副本
这是另一种简短的方法。缺点是你只能打破外部循环,但有时这正是你想要的。
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
这使用了for / else结构:为什么python在for和while循环之后使用'else' ?
关键洞见:似乎只有外部循环总是会破裂。但如果内环不破裂,外环也不会破裂。
这里的continue语句很神奇。它在for-else从句中。根据定义,如果没有内部断裂,就会发生这种情况。在这种情况下,继续巧妙地绕过外部中断。