python 10 迭代器和三元運算子
阿新 • • 發佈:2018-12-07
- 一.迭代器
1.迭代器協議:物件必須提供一種next方法,執行該方法要麼返回迭代中的下一項,要麼引起一個stopIteration異常,終止迭代
2.可迭代物件:實現了迭代器協議的物件
3.python 的內部工具(for,sum,min,max函式),使用迭代器協議訪問物件
- 二 for迴圈機制
for迴圈本質:迴圈所有物件,全部使用迭代器協議
注意1:字典,字串,列表,元組,集合,檔案物件,都不是可迭代物件,for迴圈時,呼叫了他們的_iter_方法,將他們轉換為可迭代物件
for迴圈工作:1,呼叫_iter_方法 2,呼叫_next_方法 3.捕捉異常
為什麼要有for迴圈:
序列型別 字串,列表,元組可以使用index訪問,但是字典集合,檔案物件,不行,for迴圈一視同仁 ,都是使用迭代器協議
注意2:next()方法,就是在呼叫迭代器本身的iter_._next_()方法
- 三 三元運算,列表解析,生成器表示式
1.生成器:一種資料型別,自動實現了迭代器協議,不是字典,字串,列表,元組,集合,檔案物件之類的,不需要呼叫_iter_方法
兩種表現形式:①常規函式定義,使用yield語句而不是return語句返回結果. yield語句一次返回一個結果,在每個結果中間,掛起函式狀態,下次從它離開的地方繼續.
②生成器表示式:
三元表示式,條件成立返回前面,否則返回後面
列表解析
缺點:當資料過大的時候,所佔記憶體過過大
生成器:這就是生成器表示式,
比列表解析節省記憶體.原因:基於迭代器協議,一個個生成物件,
只要使用迭代器協議的函式,就可以使用生成器表示式
- 四 生成器函式好處
1.得到一個值,可以立馬進行返回,不用等所有的值都得到
2.節約記憶體(不用一個容器裝起來)
不使用生成器函式的壞處
1.佔空間大
2.效率低(函式執行完了,所有的返回值都準備好了才能返回)