0
我注意到我都可以做,用相同的結果直接收集迭代,或用iterator
foo = """
this is
a multi-line string.
"""
for line in foo.splitlines():
pass
for line in iter(foo.splitlines())
pass
的區別是什麼? 我應該選擇哪一個?
我注意到我都可以做,用相同的結果直接收集迭代,或用iterator
foo = """
this is
a multi-line string.
"""
for line in foo.splitlines():
pass
for line in iter(foo.splitlines())
pass
的區別是什麼? 我應該選擇哪一個?
for
語句在您試圖迭代的對象上隱式調用iter()
。然後第二種形式是多餘的,兩次做同樣的工作,沒有任何好處。
有可能是一個優勢之前你循環存儲iter()
迭代:
foo_iter = iter(foo.splitlines())
for line in foo_iter:
next_line = next(foo_iter, '')
print(next_line.rstrip())
print(line.rstrip())
在這種情況下,我認爲這是最好使用while循環。 for循環意味着將每個元素逐個迭代給我。雖然我想在這個特定的例子中,將'foo.splitlines()'包裝在一個生成器中,每個'next()'調用產生兩個元素的元組也是可行的。 – Dunes 2014-10-31 14:04:01
@Dunes:不確定是否有擔保。例如,當解析具有重複記錄結構的文件時,我經常使用嵌套的for循環,例如,在行上迭代,直到檢測到記錄結束。使用'while'會使這些代碼變得不必要的複雜。 – 2014-10-31 14:06:56
你會得到一個運行你的代碼的stopIteration錯誤 – 2014-10-31 14:08:41