1. 程式人生 > >python 10 迭代器和三元運算子

python 10 迭代器和三元運算子

  • 一.迭代器

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.效率低(函式執行完了,所有的返回值都準備好了才能返回)