1. 程式人生 > >讀書筆記——Python中的迭代器和列表解析

讀書筆記——Python中的迭代器和列表解析

Python所謂的迭代協議

有__next__方法的物件會前進到下一個結果,在一系列結果的末尾時,則會引發StopIteration。在Python中,任何這類物件都認為是可迭代的。任何這類物件也能以for迴圈或其他迭代工具遍歷,因為所有迭代工具內部工作起來都是在每次迭代中呼叫__next__,並捕捉StopIteration異常來確定何時離開。

對於已開啟的檔案物件來講,有個方法名為readline,可以一次讀一行。但是,它內部也有__next__方法,因此是可迭代物件。所以,逐行讀取文字檔案的最佳方式就是根本不要去讀取;其替代辦法就是,讓for迴圈在每輪自動呼叫next從而前進到下一行。

例如:

for line in open('script1.py'):
    print(line, end = ' ')

迭代器在Python中是以C語言的速度執行的,而while迴圈則是通過Python虛擬機器執行Python位元組碼的。任何時候,我們把Python程式碼換成C程式程式碼,速度都應該會變快。

手動迭代:iter和next

為了支援手動迭代程式碼,Python3.0還提供了一個內建函式next,它會自動呼叫一個物件的__next__方法。給定一個可迭代物件,呼叫next(X) 等同於X.__next__()

之後再補充。