可以直接作用於for
迴圈的物件統稱為可迭代物件:iterable
使用isinstance()
判斷乙個物件是否是iterable
物件
>>> 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
可以被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
、str
等資料型別不是iterator
?
這是因為python的iterator
物件表示的是乙個資料流,iterator物件可以被next()
函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration
錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()
函式實現按需計算下乙個資料,所以iterator
的計算是惰性的,只有在需要返回下乙個資料時它才會計算。
iterator
甚至可以表示乙個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。
pyhotn3入門基礎 資料型別和變數
1.字串 print i m ok.i m ok.print i m learning npython.i m learning python.print n 轉義 print t print r t t 列印多行 print line1 line2 line3 line1 line2 line3 ...
pyhotn3入門基礎 15 裝飾器與偏函式
函式物件有乙個 name 屬性,可以拿到函式的名字 def now print 2017 6 15 f now f 2017 6 15 f.name now now.name now 假設我們要增強now 函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now 函式的定義,這種在 執行期...
C 基礎入門 12
deque容器 雙端陣列,可以對頭部進行插入和刪除,也可以對尾端 與vector區別 vector對頭部的插入刪除效率低,資料量越大,效率越低 deque對頭部的插入刪除更快 vector訪問元素的速度更快 deque內部工作原理 內部有中控器,維護每段緩衝區的內容,緩衝區中存放真實資料 中控器維護...