2024-05-15 21:33:17 发布
网友
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幸运的是不会传播。break是要中断当前循环,句号。如果要传播事件,则应该raise异常。尽管如此,引发异常来中断循环是一种非常丑陋的中断循环的方法,也是一种很好的中断代码的方法。
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
如前所述,这是一个非常丑陋的设计。假设您忘记捕获此异常,或者将其类型从Exception更改为MyBreakException,并且忘记在代码的try/except较高部分的某个位置更改它。。。
Exception
MyBreakException
try/except
生成器示例有其优点,它使您的代码更functional style(这是我以前非常喜欢的)
# 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
……类似于欧米罗提到的^{}
函数不能在调用它的代码中导致中断或继续。中断/继续必须出现在循环中。你的选择是:
range
我的意思是这样的:
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”迭代器(在本例中是一个范围)将条件分组到一个生成器中,从而使条件中断。然后在这个生成器上迭代,而不是在范围本身上迭代,得到断开行为。
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
解释布伦巴恩斯的答案:
break
幸运的是不会传播。break
是要中断当前循环,句号。如果要传播事件,则应该raise
异常。尽管如此,引发异常来中断循环是一种非常丑陋的中断循环的方法,也是一种很好的中断代码的方法。KISS!最简单的方法是直接在循环中检查条件
如果出于某种原因,您想要传播异常,那么您可以这样使用它
如前所述,这是一个非常丑陋的设计。假设您忘记捕获此异常,或者将其类型从
Exception
更改为MyBreakException
,并且忘记在代码的try/except
较高部分的某个位置更改它。。。生成器示例有其优点,它使您的代码更functional style(这是我以前非常喜欢的)
……类似于欧米罗提到的^{}
函数不能在调用它的代码中导致中断或继续。中断/继续必须出现在循环中。你的选择是:
range
我的意思是这样的:
这允许您通过基于“base”迭代器(在本例中是一个范围)将条件分组到一个生成器中,从而使条件中断。然后在这个生成器上迭代,而不是在范围本身上迭代,得到断开行为。
相关问题 更多 >
编程相关推荐