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的函数放入循环中,我该如何编写呢?
函数不能导致调用它的代码中断或继续。中断/继续必须出现在循环内部。您的选择是:
range
#3 我的意思是这样的:
def gen(base):
for item in base:
if item%3 == 0:
break
yield i
for i in gen(range(1, 100)):
print "Pass," i
这允许您通过将条件分组到基于“基”迭代器(在本例中为范围)的生成器中来放置中断。然后,您迭代此生成器而不是迭代范围本身,您就会得到破坏行为。
详细阐述 BrenBarns 的答案:
break
幸运的是不会传播。 break
是打破当前循环,句号。如果你想传播一个事件,那么你应该 raise
一个例外。虽然,引发异常来打破循环是一种非常丑陋的打破循环的方式,但却是打破代码的好方法。
亲吻!最简单的是直接在循环中检查条件
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
如前所述,这是一个“非常丑陋”的设计。想象一下,您忘记捕获此异常,或者将其类型从 Exception
更改为
MyBreakException
并忘记在代码的 try/except
较高部分中的某个位置更改它...生成器示例有其优点,它使您的代码更加函数式
(我个人很喜欢)
# 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
...与 eumiro 提到的
类似
def stopIfZero(a):
if int(a) == 0:
break
else:
print('Continue')
while True:
stopIfZero(input('Number: '))
会是这样的:
def stopIfZero(a):
if int(a) == 0:
return False
else:
print('Continue')
return True
while stopIfZero(input('Number: ')):
continue