有幾種方法,打破了幾個嵌套循環發送的StopIteration爲循環從迭代器之外
它們是:
1)利用突破繼續
for x in xrange(10):
for y in xrange(10):
print x*y
if x*y > 50:
break
else:
continue # only executed if break was not used
break
2)使用回
def foo():
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
return
foo()
3)使用特殊異常
class BreakIt(Exception): pass
try:
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
raise BreakIt
except BreakIt:
pass
我有一些想法,可以有一些其他的方式來做到這一點。 它通過使用直接發送到外部循環的StopIteration異常。 我寫了這個代碼
it = iter(range(10))
for i in it:
for j in range(10):
if i*j == 20:
raise StopIteration
不幸的是,StopIteration異常沒有陷入任何for循環和代碼生成一個醜陋的回溯。 我認爲這是因爲StopIteration不是從迭代器它內發送的。 (這是我的猜測,我不確定)。
有什麼方法可以將StopIteration發送到外部循環?
謝謝!
請問,你能解釋一下,soppable_iter的工作原理嗎?我不明白以if開頭的部分:... – ovgolovin
這真的很聰明,比我提供的課程版本短得多! – kindall
我想我需要仔細看看協程,因爲用我目前的知識,我無法掌握stoppable_iter中的算法。 – ovgolovin