知識總結和記錄 迭代器和生成器

2022-04-10 18:57:55 字數 1149 閱讀 4912

可以被for迴圈的都是可迭代的(字串、列表、元祖、字典、集合),就是將某個資料集內的資料「乙個挨著乙個的取出來」,就叫做迭代

可以被迭代要滿足的要求就叫做可迭代協議。可迭代協議的定義,就是內部實現了__iter__方法

迭代器遵循迭代器協議:必須擁有__iter__方法和__next__方法

for迴圈就是基於迭代器協議提供了乙個統一的可以遍歷所有物件的方法,即在遍歷之前,先呼叫物件的__iter__方法將其轉換成乙個迭代器,然後使用迭代器協議去實現迴圈訪問,這樣所有的物件就都可以通過for迴圈來遍歷了,這就是無所不能的for迴圈

本質:迭代器(所以自帶了__iter__方法和__next__方法,不需要我們去實現)

特點:惰性運算,開發者自定義

1.生成器函式:常規函式定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返回乙個結果,在每個結果中間,掛起函式的狀態,以便下次從它離開的地方繼續執行

2.生成器表示式:類似於列表推導,但是,生成器返回按需產生結果的乙個物件,而不是一次構建乙個結果列表

send

yield from

1.把列表解析的換成()得到的就是生成器表示式

2.列表解析與生成器表示式都是一種便利的程式設計方式,只不過生成器表示式更節省記憶體

3.python不但使用迭代器協議,讓for迴圈變得更加通用。大部分內建函式,也是使用迭代器協議訪問物件的。例如, sum函式是python的內建函式,該函式使用迭代器協議訪問物件,而生成器實現了迭代器協議,所以,我們可以直接這樣計算一系列值的和:

sum(x ** 2 for x in range(4))
而不用多此一舉的先構造乙個列表:

生成器相關面試題

題1題2

迭代器和生成器總結

迭代器 是乙個抽象的概念,任何物件,如果它的類有 next 方法和 iter 方法返回自己本身,對於 string list dict tuple 等這類容器物件,使用 for 迴圈遍歷是很方便的。在後台 for 語句對容器物件呼叫 iter 函式,iter 是 python 的內建函式。iter ...

生成器和迭代器

可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...

迭代器和生成器

1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...