2015-11-07 87 views
4

在Java中,迭代器有一個hasNext()方法(如果我記得正確 - 從我用Java編程已經很長時間了,所以細節可能會關閉)。當你在遍歷一個迭代器時,你查詢hasNext()看看你是否應該停止。爲什麼Python使用異常來管理迭代器,爲什麼不使用其他語言?

在Python中,沒有hasNext(),而迭代器在它們想要發出信號表示應該停止時反而會引發StopIteration異常。爲什麼區別?

我可以想象,不需要hasNext()爲執行迭代器的人減少了工作;在那種情況下,爲什麼Java和其他語言使用它?這是哲學上的差異,還是由於某種原因在Python中更容易/更快的異常?

+5

相關:http://programmers.stackexchange.com/questions/112463/why-do-iterators-in-python-raise-an-exception –

+0

@ajcr:謝謝!我會在未來首先查看程序員的這些問題。我覺得這個問題不是我們現在標記爲重複的東西的副本,但它是您鏈接上的問題的重複(現在我已經開悟了)。我們可以改變它爲後代? –

+0

我投票結束這個問題作爲題外話,因爲它是關於語言設計,這是更適合(和[已經回答](http://programmers.stackexchange.com/questions/112463/why-do-iterators -in-python-raise-an-exception))關於程序員。 – Matt

回答

0

StopIteration更常用於生成器(關鍵字yield)而不是迭代器。生成器使用該異常向調用者指示序列已用盡。

另外,利用異常是python語言的一個常見習慣用法。一個很好的例子就是檢測浮點數字符串。它通常這樣寫在python:

def is_float(in_num): 
    try: 
     float(in_num) 
     return true 
    except ValueError: 
     return false 
+0

我的印象是每個迭代器在元素超出時都會引發'StopIteration'。例如,如果你執行'it = iter('abc');下(它);下(它);下(它);下一個(它)'你得到一個'StopIteration'。要求寬恕的好處,我沒有考慮過。 –

相關問題