python 叠代器協議和生成器!
一、什麽是叠代器協議
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 叠代器協議和生成器!