4.1手動遍歷迭代器
阿新 • • 發佈:2022-03-17
問題:
你想遍歷一個可迭代物件中的所有元素,但是卻不想使用for迴圈
解決方案:
為了手動的遍歷可迭代物件,使用next()函式並在程式碼中捕獲StopIterable異常。比如,下面的例子手動讀取一個檔案中的所有行:
def manual_iter(): with open(r'D:\study\workspace\python學習\python3高階\第二章:字串和文字\2-1使用多個界定符分隔字串.py') as f: try: while True: line = next(f) print(line, end='') except StopIteration: pass manual_iter()
通常來講,StopIterable用來指示迭代的結尾。然而,如果你手動使用上面演示的next()函式的話,你還可以通過返回一個指定值來標記結尾。比如None,下面是示例:
while True:
line = next(f, None)
if line is None:
break
print(line, end='====')
討論:
大多數情況下,我們會使用for迴圈語句用啦變數一個可迭代物件,但是,偶爾也需要對迭代做更加精確的控制,這時候瞭解底層迭代機制就顯得尤為重要了。
下面的互動示例向我們演示了迭代期間所發生的基本細節
items=[1,2,3]
it=iter(items)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
'''
, line 31, in <module>
print(next(it))
StopIteration
'''
本章接下來幾小節會更深入的講解迭代相關技術,前提是你先要理解基本的迭代協議機制,確保你已經把這章的內容牢牢記在心中。