pyhotn3入門基礎 12 迭代器

2021-08-02 14:03:51 字數 1643 閱讀 4603

可以直接作用於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物件,但listdictstr雖然是iterable,卻不是iterator

listdictstriterable變成iterator可以使用iter()函式

>>> isinstance(iter(), iterator)

true

>>> isinstance(iter('abc'), iterator)

true

為什麼listdictstr等資料型別不是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內部工作原理 內部有中控器,維護每段緩衝區的內容,緩衝區中存放真實資料 中控器維護...