1. 程式人生 > >Python學習Iterable和Iterator

Python學習Iterable和Iterator

Iterable

可以直接作用於for迴圈的物件稱為的迭代器物件:Iterable 

在Python中的集合資料型別(list、tuple、dict、set、str等)和generator,包括生成器和帶yield的generator function等都屬於Iterable
#驗證
#isinstance()為Python內建可判斷型別的函式,和java的instanceof差不多
>>> from collections import Iterable
>>> isinstance([], Iterable)
True
>>> 
isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False

Iterator

 可作用於next()函式的物件都是一個迭代器(Iterator)型別,它們表示一個惰性計算的序列
#驗證
>>> from collections import Iterator
>>> 
isinstance((x for x in range(10)), Iterator) True >>> isinstance([], Iterator) False >>> isinstance({}, Iterator) False >>> isinstance('abc', Iterator) False #生成器都是Iterator物件,但list、dict、str雖然是Iterable,卻不是Iterator #把list、dict、str等Iterable變成Iterator可以使用iter()函式 >>>
isinstance(iter([]), Iterator) True >>> isinstance(iter('abc'), Iterator) True

為什麼list,dict等資料型別不是Iterator?

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

Iterator甚至可以表示一個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。
說白了就是Iterator可以表示一個無限大的陣列,不能取到底,而list,dict等資料型別只能表示一個有限陣列,是具體的。

相關推薦

Python學習IterableIterator

Iterable 可以直接作用於for迴圈的物件稱為的迭代器物件:Iterable 在Python中的集合資料型別(list、tuple、dict、set、str等)和generator,包括生成器和帶yield的generator function等都屬

Python中的iterableiterator

下標 with self. 條件 叠代 情況下 item 遍歷 def 參照官方文檔: 1 iterable是一個能返回它的成員的對象。包括sequence types(list,str,tuple) and not-sequence types(dict, file ob

Iterable Iterator

數據 輸出 mage 無法 對象 元祖 個數 調用函數 循環 可以被for循環輸出的為iterable (可叠代對象) 可以被next()調用並不斷返回下一個數據的對象為iterator叠代器(python一切皆對象) 數據流,無法知曉其終點,只能推過next不斷調用,

Python學習--編碼變數的記憶體問題

編碼問題 一.Python2 預設為ascii碼,使用時需要使用 # -*- encoding:utf-8 -*- 二.Python3 預設為utf-8 編碼方式 解釋 unico

python學習——採用“+”“join”兩種方法合併字串

將一些小的字串合併成一個大的字串,有兩總方法: 1、“+” 很簡單的方法,例如: l = ['a', 'b', 'c', 'd', 'e'] s = '' for x in l: s += x print(s) 得到結果: 'abcde

python學習--python2python3共存時如何優雅地用pip安裝模組?

參考網頁: 1. 同時裝了Python3和Python2,怎麼用pip? 2. How to install pip for Python 3 on Mac OS X? 自己試了一下,發現其實解決方案很簡單。 在python2時,使用語句: pip install xxx

python學習--maxreduce函式

問題: 我有這樣的一個列表: 1 ['a.b.c.d11u.e.f.g', 'e.f88.g', 'caa3.z.brr', 'z.48.ff.ee'] 需要找節點最多的一個(節點間由.分割) 看似簡單的工作,要用 Pythonic 的方法來做,還是

Java Iterable Iterator 示例

廢話不多說,直接上程式碼: package Test; import java.util.ArrayList; import java.util.Iterator; import java.util

Python學習----ListTuple類型

color 但是 mos 一個 eba 需要 append() 內置 語言 目錄    1.List   2.Tuple 一、List   List是Python中的一種內置的數據類型,它代表的是一個列表,它是一種有序的集合,可以隨時添加刪除和查找裏面的元素。表示

python學習|類實例

成了 code alt 區別 產品 格式 bubuko dex 創建 什麽叫實例對象呢?大家可以想象一下,【類】就像工廠的模具,以它為模板,造出來的成千上萬的產品,才是被我們消費、購買、使用,真正融入我們生活的東西。這些產品,在Python中就叫【實例對象】

Java中的Enumeration、IterableIterator介面詳解

前言 在看各類Java書籍或者博文的時候,總是會遇到Enumeration、Iterable和Iterator這三個介面,如果對這幾個介面不是很明白的話,總會讓自己看著看著就迷惑了,正好這週末,抽空把這三個介面總結一下,一掃之前的各種迷惑。 Enumeration Enumeration(列舉)介面的作用和I

python學習--如何實現可叠代對象(itearable)叠代器(iterator

dict 作用 pri 返回 -- 生成器 ble ear item 關於可叠代對象Iterable 和叠代器對象iterator 可叠代對象:可以直接作用於for循環的對象統稱為可叠代對象:Iterable。 可叠代對象包含一個__iter__方法,或__getitem_

python 入門第三課 迭代物件Iterable迭代器Iterator

迭代物件Iterable和迭代器Iterator __author__ = 'admin' from collections.abc import Iterator from collections.abc import Iterable print(isinstance([],Iterable)) p

Python學習筆記——叠代器生成器

返回對象 node manual 通過 line 計數 bject repr 對象 1、手動遍歷叠代器   使用next函數,並捕獲StopIteration異常。 def manual_iter(): with open(‘./test.py‘) as f:

Python 學習——高階函數 filter sorted

dict 字符串排序 一個 大寫 bsp sort log 說話 blog filter filter函數顧名思義,篩選,通過調用函數進行篩選序列中的滿足函數的子項 以實例來說話: 過濾一個序列中所有的偶數,保留奇數 另如下,過濾掉一個序列中的所有空格以及

Python學習之路8?叠代器協議生成器

rep 好處 obj 必須 決定 內容 cnblogs 有用 pri 一 什麽是叠代器協議 1.叠代器協議是指:對象必須提供一個next方法,執行該方法要麽返回叠代中的下一項,要麽就引起一個StopIteration異常,以終止叠代 (只能往後走不能往前退) 2.可叠代對象

Python學習之三【對象類型&&運算符】

str pop python學習 十六進制 更強 ring span 整數相除 一定的 [對象和類型] 學生的屬性: 小明 對象 姓名:男 性別: 年齡: 身高: 體重: 籍貫: 五種基本對象類型 字符串 (string),簡

python學習筆記--Paramiko模塊安裝使用(轉)

lib64 報錯 再次 ref html 學習筆記 warn command sta 首先安裝依賴 yum -y install gcc 1 安裝 pycrypto wget http://ftp.dlitz.net/pub/dlitz/crypto/pycr

python學習筆記第十一節(叠代其他)

技術分享 img 余數 商品列表 步長 取數 sorted函數 學習 四舍五入 yiled 面相過程編程 造好內容,統一發給下面 上面這個是傻瓜版 內置函數 print(divmod(10,3)) 將10除以3,顯示商和余數 enumerate函數,顯示元素及它

python學習day4之路文件的序列化反序列化

data 多次 文件交互 由於 mps logs json tro 之路 json和pickle序列化和反序列化   json是用來實現不同程序之間的文件交互,由於不同程序之間需要進行文件信息交互,由於用python寫的代碼可能要與其他語言寫的代碼進行數據傳輸,json支持