2013-05-26 18 views
2

我试图找出如何才能打破一个嵌套的循环来实现以下目标:歇嵌套循环不执行子序列代号

  1. 当它打破了嵌套的循环,它仍然是在外部for循环
  2. 当它发生嵌套for循环时,它不会执行剩余的代码,在这种情况下,最后一行。
def for_loop_flow(): 
    for a in range(0, 2): 
     print "a = %s" % a 
     for b in range(3, 5): 
      print "b = %s" % b 
      if b == 4: 
       print "XXXXXXXXbreak" 
       break 
     print("big piece of logic here, when nested for loop breaks, I " 
       "don't wanna be here") 

现在,我只能想到用一个标志:

def for_loop_flow(): 
    for a in range(0, 2): 
     print "a = %s" % a 
     flag = True 
     for b in range(3, 5): 
      print "b = %s" % b 
      if b == 4: 
       print "XXXXXXXXbreak" 
       flag = False 
       break 
     if flag == True: 
      print("big piece of logic here, when nested for loop breaks, I " 
        "don't wanna be here") 

没有更好的办法这样做呢?

回答

8

任何for循环与break和标志变量可以表示为forelse子句。所以你的情况,你可以摆脱标志和使用:

for a in range(2): 
    print "a = {:d}".format(a) 
    for b in range(3, 5): 
     print "b = {:d}".format(b) 
     if b == 4: 
      print "BREAK!" 
      break 
    else: 
     print "Only run if no break in inner loop" 

请注意,这也适用于while

while check_if_still_true(): 
    do_work() 
    if shall_we_break(): 
     break 
else: 
    we_exited_because_check_returned_false() 
+0

总是好的知道一些Python有而Java不:) – Shengjie