參考:
一、迭代器iterables
>>> mylist1 = [1, 2, 3]>>> for i in
mylist:
...
(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,除了它返回的是乙個生成器,例如:
defcreategenerator():
... 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...