必須是定義了__iter__()方法和next()方法的物件。
python的iterator物件表示的是乙個資料流,可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,所以iterator
的計算是惰性的,只有在需要返回下乙個資料時它才會計算;iterator物件可以被next()函式呼叫並不斷返回下乙個資料,直到沒有資料
時丟擲stopiteration錯誤;所有的iterable可迭代物件均可以通過內建函式iter()來轉變為迭代器iterator。__iter__( )方法是讓物件可以用
for … in迴圈遍歷時找到資料物件的位置,next( )方法是讓物件可以通過next(例項名)訪問下乙個元素。除了通過內建函式next呼叫可以
判斷是否為迭代器外,還可以通過collection中的iterator型別判斷。如: isinstance(』』, iterator)可以判斷字串型別是否迭代器。注
意: list、dict、str雖然是iterable,卻不是iterator。迭代器優點:節約記憶體(迴圈過程中,資料不用一次讀入,在處理檔案物件時特別
有用,因為檔案也是迭代器物件)、不依賴索引取值、實現惰性計算(需要時再取值計算);
舉例:用迭代器的方式訪問檔案
for line in open(「test.txt」):print(line)
這樣每次讀取一行就輸出一行,而不是一次性將整個檔案讀入,節約記憶體。迭代器使用上存在限制:只能向前乙個個地訪問資料,已訪問
資料無法再次訪問、遍歷訪問一次後再訪問無資料
舉例:l = [1,2,3,4]
i=iter(l) #從list列表生成迭代器i
list(i) #將迭代器內容轉換成列表,輸出[1,2,3,4]
list(i) #將迭代器內容再次轉換成列表,輸出
用for迴圈訪問:
i=iter(l)
for k in i:print(k) #輸出1、2、3、4
for k in i:print(k) #再次迴圈沒有輸出
如果需要解決這個問題,可以分別定義乙個可迭代物件,每次訪問前從可迭代物件重新生成和迭代器物件;迭代器當所有的元素全部取出
後再次呼叫next就會丟擲乙個stopiteration異常,這並不是錯誤的發生,而是告訴外部呼叫者迭代完成了。
python迭代器使用 Python迭代器的用法
我們在前面使用過語句 for x in列表物件 這就表示列表物件是可迭代的 iterable 那麼如何判斷某個物件是否可迭代呢?答案是可以使用collections.iterable類來判斷。如下面的 所示,列表是可迭代的,整數是不可迭代的,字串是可迭代的。from collections impo...
python學習 迭代器使用說明
在學習迭代器過程中,感覺很難理解,還是要放在例項中說明。理解迭代器的話,可以從for in 迴圈語句中。1 序列 number 1,2,3,4,5 for i in number print i 得到結果 123 45上面這個例子在學習for迴圈語句時,很容易理解。但其實,這就是乙個迭代器的用法,列...
ruby 迭代器使用方法
ruby 迭代器並不是ruby發明的.它廣泛地運用於各種物件導向語言.在lisp中也有,只是不這麼叫罷了.儘管如此,迭代器的概念並不為許多人熟悉,因此我們將在此做較為詳細的介紹.你知道,動詞 iterate 的意思是做同一件事許多遍,因此,iterator就是用來將同一件事做許多次的東西.當我們寫程...