1. 程式人生 > >python 叠代器協議和生成器!

python 叠代器協議和生成器!

為什麽 watermark 叠代 ESS 學習 超出 size oss 都是

技術分享圖片
一、什麽是叠代器協議

1.叠代器協議是指:對象必須提供一個next方法,執行該方法要麽返回叠代中的下一項,要麽就引起一個stoplteration異常,以終止叠代(只能往後走,不能往前退)

2.可叠代對象:實現了叠代器協議的對象(如何實現:對象內部定義一個iter()方法)

3.協議是一種約定,可叠代對象實現了叠代器協議,python的內部工具(如for循環,sum,min,max函數等)使用叠代器協議訪問對象

二、python中強大的for循環機制

for循環的本質:循環所有對象,全都是使用叠代器協議。

正文清源:

很多人會想,for循環的本質就是遵循叠代器協議去訪問對象,那麽for循環的對象肯定都是叠代器了啊。沒錯,那既然這樣,for循環可以遍歷(字符串,列表,元祖,字典,集合,文件對象),那這些類型的數據肯定是可叠代對象啊?但是,我tmd為什麽定義一個列表=[1, 2, 3, 4]沒有next方法,打臉麼?

(字符串,列表,元祖,字典,集合,文件對象)這些都不是可叠代對象,只不過在for循環式,調用了他們內部的iter方法,把他們變成了可叠代對象。

然後for循環調用可叠代對象的next方法取值,而且for循環會捕捉stoplteration異常,以終止叠代。

1 #!/usr/bin/env python

2 # -- coding:utf-8 --

3 ls = [‘a‘, ‘b‘, ‘c‘]

4 # 一、下標訪問方式,默認從0開始計數

5 print(ls[0])

6 print(ls[1])

7 print(ls[2])

8 # print(ls[3]) # 報錯,超出索引下標

9 # # 二、遵循叠代器協議訪問方式

10 diedai_ls = ls.iter()

11 print(diedai_ls.next())

12 print(diedai_ls.next())

13 print(diedai_ls.next())

14 # 三for循環訪問方式

15 for item in ls:

16 print(item)

17 # 使用while循環方式

18 diedai_ls = ls.iter()

19 while True:

20 try:

21 print(diedai_ls.next())

22 except StopIteration:

23 print(‘叠代完啦!‘)

24 break

好啦,上面就是我的分享,如果你跟我一樣都喜歡python,想成為一名優秀的程序員,也在學習python的道路上奔跑,歡迎你加入python學習群:839383765 群內每天都會分享最新業內資料,分享python免費課程,共同交流學習,讓學習變(編)成(程)一種習慣!

python 叠代器協議和生成器!