def funcA(i):
if i%3==0:
print "Oh! No!",
print i
break
for i in range(100):
funcA(i)
print "Pass",
print i
我知道上面的脚本不起作用。那么,如果我需要在循环中放置带有break或continue的函数,该怎么写呢?
一个函数不能在调用它的代码中引发 break 或 continue。break/continue 必须直接出现在循环内部。你的选项是:
第三个选项类似于这样:
def gen(base):
for item in base:
if item%3 == 0:
break
yield i
for i in gen(range(1, 100)):
print "Pass," i
这允许您将具有条件的中断通过将它们分组到基于“base”迭代器(在这种情况下是一个范围)的生成器中来实现。然后,您遍历此生成器而不是范围本身,并获得中断行为。
详细说明BrenBarn的答案:break
幸运的是不会传播。 break
是打破当前循环,就这样。如果要传播事件,则应raise
异常。虽然,引发异常来中断循环是一种非常丑陋的中断循环的方法,也是破坏代码的好方法。
KISS!最简单的方法是直接在循环中检查条件。
def my_condition(x):
return x == 4
for i in xrange(100):
if my_condition(i): break
print i
# exception example
for i in xrange(100):
if i == 4: raise Exception("Die!")
print i
# generator example
def conditional_generator(n, condition):
for i in xrange(n):
if condition(i):
break
else:
yield i
for i in conditional_generator( 100, my_condition ):
print i
...这类似于takewhile
,eumiro提到过
def funcA(i):
if i%3==0:
print "Oh! No!",
print i
return True
else:
return False
for i in range(100):
if funcA(i):
break
print "Pass",
print i
中断不会在函数之间传播,你需要直接将其放置在循环中的某个位置。
itertools.takewhile
的东西。 - eumiro