Python學習筆記__3.5章 迭代器

來源:互聯網
上載者:User

標籤:程式設計語言   Python   

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

我們已經學習了list、tuple、dict、set、str、generator、generator function 這些可以用for 迴圈的就是可迭代(Iterable)對象。

但其中只有generator 和 generator function,可以被 next() 函數調用。

而能被next函數調用的 Iterable對象,我們稱為迭代器(Iterator)

 

1.1、Iterable 到Iterator 的轉化

雖然Iterable 不一定是 Iterator。但我們可以用 iter() 函數進行轉化

list、dict、str等Iterable可以使用iter()函數變成Iterator:

# for 迴圈遍曆 list

for x in [1, 2, 3, 4, 5]:

    pass

# 轉化為 generator 遍曆

it=iter([1,2,3,4,5])  # 定義 generator對象 it

 

while True:

        try:

            x=next(it)

        except StopIteration:

            break

1.2、為什麼 Iterable 不一定是 Iterator

為什麼list、dict、str等資料類型不是Iterator 呢?

因為Python的Iterator對象表示的是一個資料流,Iterator對象可以被next()函數調用並不斷返回下一個資料,直到沒有資料時拋出StopIteration錯誤。這個資料流可以看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個資料,所以Iterator的計算是惰性的,只有在需要返回下一個資料時它才會計算。

 

Iterator甚至可以表示一個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。

 

1.3、小結

  1. 凡是可作用於for迴圈的對象都是Iterable類型;

  2. 凡是可作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;

  3. 集合資料類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。

  4. Python的for迴圈本質上就是通過不斷調用next()函數實現的


Python學習筆記__3.5章 迭代器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.