在Python程式設計中,循環處理是不可避免的,這涉及到兩個重要的概念,即可迭代物件和迭代器(Iterable & Iterator)。這個關於迭代的主題,我將分為兩到三篇內容來介紹,以幫助你在實際程式設計中理解和應用。本文為第一篇。
可迭代物件(Iterable)是指能夠一次傳回一個成員的物件。可迭代對象的例子包括所有序列類型(如list, str和tuple)和一些非序列類型,如dict,文件對象,以及任何你所定義的類的對象,其實現了__iter__()方法或__getitem__ ()方法所規定的序列語意-及迭代協議(詳見這裡:)。
可迭代物件可以用於for迴圈和其他需要序列的地方(如zip(),map(),filter()…)。當可迭代物件作為參數傳遞給內建函數iter()時,它將傳回該物件的迭代器(iterator)。這個迭代器只適合一組值的一次性遍歷。在使用可迭代物件時,通常不需要呼叫iter()或自己處理迭代器物件。用for語句自動為來完成這項工作,它會建立一個臨時的未命名變量,其用於在循環期間保存迭代器。
簡而言之,可迭代物件是任何實作了__iter__()方法或__getitem__()方法的類別物件。
迭代器(Iterator)是指表示資料流的物件。重複呼叫迭代器的__next__()方法(或將其傳遞給內建函數next())將傳回流中的連續項。當沒有更多的數據可用時,將引發StopIteration異常。此時,迭代器物件已經耗盡,任何對其__next__()方法的進一步呼叫都會再次引發StopIteration。迭代器必須具有返回迭代器物件本身的__iter__()方法,因此每個迭代器也是可迭代的(iterable),並且可以在接受其他可迭代物件的大多數地方使用。
簡而言之,迭代器是實作了包含兩個迭代器協定方法__next__()和__iter__()的資料流物件。
一個值得注意的例外是試圖多次迭代的程式碼(多次使用同一個迭代器)。容器物件(如列表)每次傳遞給iter()函數或在for迴圈中使用時都會產生一個新的迭代器。使用迭代器嘗試此操作將只返回上一個迭代過程中使用的耗盡的迭代器對象,使其看起來像空容器。所以在編寫程式碼中要避免這樣的情況出現。
另外,要了解的是內建函數iter() (其在幕後呼叫__iter__()方法)傳回的是一個迭代器物件。所以我們可以說。可迭代物件(iterable)是一個傳回迭代器的物件。
為了進一步理解迭代器和可迭代對象,我將後續講解和程式碼範例,進一步介紹如下幾點關鍵內容:
以上是Python程式設計:可迭代物件與迭代器(Iterable & Iterator)的詳細內容。更多資訊請關注PHP中文網其他相關文章!