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

python 手動遍歷迭代器

技術標籤:程式語言python

想遍歷一個可迭代物件中的所有元素,但是卻不想使用for 迴圈

為了手動的遍歷可迭代物件,使用next() 函式並在程式碼中捕獲StopIteration 異常。比如,下面的例子手動讀取一個檔案中的所有行

def manual_iter():
    with open('/etc/passwd') as f:
        try:
            while True:
                line = next(f)
                print(line, end='')
        except StopIteration:
pass

通常來講, StopIteration 用來指示迭代的結尾。然而,如果你手動使用上面演示的next() 函式的話,你還可以通過返回一個指定值來標記結尾,比如None 。下面是示例:

'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
with open('/etc/passwd') as f:
    while True:
        line = next(f)
        if line is None:
            break
print(line, end='')

大多數情況下,我們會使用for 迴圈語句用來遍歷一個可迭代物件。但是,偶爾也需要對迭代做更加精確的控制,這時候瞭解底層迭代機制就顯得尤為重要了。下面的互動示例向我們演示了迭代期間所發生的基本細節:

>>> items = [1, 2, 3]
>>> # Get the iterator
>>> it = iter(items) # Invokes items.__iter__()
>>> # Run the iterator
>>> next(it) # Invokes it.__next__()
1 >>> next(it) 2 >>> next(it) 3 >>> next(it) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>