1. 程式人生 > 其它 >4.1手動遍歷迭代器

4.1手動遍歷迭代器

問題:

​ 你想遍歷一個可迭代物件中的所有元素,但是卻不想使用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

'''

本章接下來幾小節會更深入的講解迭代相關技術,前提是你先要理解基本的迭代協議機制,確保你已經把這章的內容牢牢記在心中。