我最近閱讀了this question,它有一個關於在Java中標記循環的解決方案。在Python中命名循環
我在想Python是否存在這樣的循環命名系統。我多次出現在需要從內部for
循環跳出外部for
循環的情況。通常,我通過將內部循環放入一個函數中來解決這個問題,該函數返回(除其他外)一個用作破壞條件的布爾值。但標籤循環打破似乎更簡單,我想嘗試一下,如果這樣的功能存在python
有誰知道它是否?
我最近閱讀了this question,它有一個關於在Java中標記循環的解決方案。在Python中命名循環
我在想Python是否存在這樣的循環命名系統。我多次出現在需要從內部for
循環跳出外部for
循環的情況。通常,我通過將內部循環放入一個函數中來解決這個問題,該函數返回(除其他外)一個用作破壞條件的布爾值。但標籤循環打破似乎更簡單,我想嘗試一下,如果這樣的功能存在python
有誰知道它是否?
沒有。
根據你正在做的事情,你可以使用itertools中的某些東西將你嵌套的for循環平化爲一個for循環。
雖然有理由在語言構造中包含命名循環語句,但您可以很容易地避免使用python而不會丟失可讀性。 一種在python
>>> try:
for i in xrange(0,5):
for j in xrange(0,6):
if i*j > 6:
print "Breaking"
raise StopIteration
print i," ",j
except StopIteration:
print "Done"
0 0
0 1
0 2
0 3
0 4
0 5
1 0
1 1
1 2
1 3
1 4
1 5
2 0
2 1
2 2
2 3
Breaking
Done
>>>
的稱爲示例的實施我通過將內環中的功能解決了這個問題,即 返回(等等),其被用作打破 條件一個布爾值。
我想你應該試試這個。這非常pythonic,簡單和可讀。
+1。對於流量控制使用異常在Python中是非常強大的,儘管它在其他語言中被認爲是不好的樣式,通常是出於性能原因。 – kindall
如果我只想「繼續」外部循環而不是停止它,該怎麼辦? – Guillochon
@Guillochon只需將try語句放在第一個for循環中 – Dylanthepiguy
這裏是打出來使用上下文管理多個嵌套塊的方式:
import contextlib
@contextlib.contextmanager
def escapable():
class Escape(RuntimeError): pass
class Unblock(object):
def escape(self):
raise Escape()
try:
yield Unblock()
except Escape:
pass
你可以用它來打破多重循環:
with escapable() as a:
for i in xrange(30):
for j in xrange(30):
if i * j > 6:
a.escape()
而且你甚至可以嵌套他們:
with escapable() as a:
for i in xrange(30):
with escapable() as b:
for j in xrange(30):
if i * j == 12:
b.escape() # Break partway out
if i * j == 40:
a.escape() # Break all the way out
檢查[第二個答案](http://stackoverflow.com/questions/653509/breaking-out-of-nested-loops),hopefull它有助於一些。但從我所看到的,沒有這樣的系統存在。 –
「但標記循環打破似乎更簡單」?比適當的功能更簡單?怎麼會這樣?你能提供一些證據來證明這將是「更簡單」嗎? –
我沒有一個方便的例子,但這將是一種情況,我將不得不創建一個函數,該函數將僅用於該位置。也許「簡單」是錯誤的詞。我的意思是,我不需要定義一個新的功能只是用在那一點上。 – inspectorG4dget