可迭代物件和生成器

2022-03-16 00:08:16 字數 1177 閱讀 1525

參考:

一、迭代器iterables

>>> mylist1 = [1, 2, 3]

>>> for i in

mylist:

...

print

(i)1

23

>>> mylist2 = [x*x for x in range(3)]

>>> for i inmylist:

... print(i)01

mylist1和mylist2都是 , 它是迭代器iterables的一種。

任何可用 for in 來迭代讀取的都是迭代容器,例如lists,strings,files.這些迭代器資料都會提前進入記憶體,非常消耗記憶體,單其中很多值都完全沒有必要每次都保持在記憶體中。

二、generators(生成器)

#先對比迭代器

mylist = [x*x for x in range(3)]

print(type(mylist))

輸出:print(mylist) 

輸出:[0, 1, 4]

#對比生成器    

mygenerator = (x*x for x in range(3))

print(type(mygenerator))

輸出:

print(mygenerator)

輸出:.at 0x7fc2ea09efc0>

for i in mygenerator:

print(i)

輸出:0

14

生成器幾乎和迭代器是相同的,除了符號變為(),但生成器不會直接生成list,而是乙個object,每次只取乙個值。

生成器可以用yield實現,yield的用法有點像return,除了它返回的是乙個生成器,例如:

def

creategenerator():

... mylist = range(3)

...

for i in

mylist:

...

yield i*i

和mygenerator = (x*x for x in range(3))的效果是一樣的

可迭代物件 迭代器,生成器

可迭代物件 iterator 列表 集合 元組 字典 字串 生成器 我們可以使用isintance 判斷乙個物件是否是iterator物件 生成器 通過列表生成式,我們可以直接建立乙個列表,但是,受到記憶體限制,列表容量肯定是有限的,如果我們僅僅需要訪問前面幾個元素,如果列表元素可以按照某種演算法推...

可迭代物件 迭代器 生成器

可迭代物件 for迴圈機制 迭代器生成器 總結type所返回的型別是例項物件的類物件,而isinstance所進行的判斷則包含了例項物件的類物件及其父類。如圖 可迭代物件 迭代器 生成器所屬的型別分別為collections包裡的iterable,iterator,generator.實現了 ite...

可迭代物件 迭代器 生成器

名詞解釋 可迭代物件 1 遵循了 實現了 迭代器協議的物件。物件內部定義了乙個 iter 方法,以實現迭代器協議 2 列表 元組 字典 字串等等的都不是可迭代物件,當用for迴圈遍歷的時候,其實for先去執行了.iter 方法,將列表 元組 字串等變成乙個可迭代的物件,在進行迭代。iter 下有 n...