1 概念
1. 容器
數據結構:多個元素組織在一起,並且提供了訪問元素的方法
2. 可迭代對象 // 序列-->可迭代對象
實現了__iter__的對象,可以用在迭代工具中遍歷
2. 迭代器 // 1. 訪問集合元素的一種方式 2. 可以記住遍歷狀態
實現了__iter__和__next__的對象;可以顯示調用next()返回下一項
3. 迭代協議
對象提供一個next()方法,要麼返回下一項,要麼StopIteration異常
4. 生成器 // 1. 自動實現了迭代器協議,可以直接調用next() 2. 有狀態 3. 延遲計算
生成器是特殊的迭代器
*生成器函數* // 返回迭代器的函數
yield關鍵字返回值,每次返回一個結果,掛起函數中間狀態,以便下次從他離開的地方繼續執行
*生成器表達式*
() // 生成器表達式比列表解析更加節省內存
2 可迭代對象種類
字符串、列表、元祖、字典、集合、文件等,一般情況下都不是可迭代對象;可以有2種方式變爲可迭代對象:
1> iter(上述對象) // 手動調用iter()將對象變爲可迭代對象
2> 迭代工具 // 比如for循環
**for循環本質**
for循環本質:for循環作爲迭代工具,內部會先調用__iter__()方法,然後調用__next__()方法一個個返回元素
3 迭代工具
*提供了一個通用的訪問可迭代對象元素的方式*
1 for循環 2 列表解析 3 字典解析 4 內置函數 // map、zip、filter、sum、enumerate、in成員