迭代器

概念

咱們已經知道,能夠直接做用於for 循環的數據類型有一下幾種:
一、一類是集合數據類型,如list、tuple、dict、set、str等;
二、一類是generator(生成器),包括生成器和帶yield的generator funcation;
(帶yield的函數生成器和列表生成器)
 
這些能夠直接做用於for循環的對象統稱爲可迭代對象:Iterable。
可使用isinstance()判斷一個對象是不是Iterable對象:
 
 

建立迭代器對象的方法

1、iter()函數得到一個Iterator對象。
list、tuple、dict、set、str等數據類型能夠用iter()函數轉換成迭代器
例如:
 1 1、正常循環一個序列:
 2 for i in [1,2,3,4,5,6,7,8,9]
 3    pass
 4     .....
 5 
 6 2、用迭代器循環一個序列:
 7 #首先得到Iterator對象:
 8 it = iter([1,2,3,4,5])
 9 
10 #循環對象:
11 while True:
12     try:
13         #得到下一個值:
14         x = next(it)
15     except  StopIteration:
16         #遇到StopIteration就退出循環:
17         break
18 
19 
20 #注意:上下兩個徹底等價
列表循環

 

2、跌倒器就是能夠迭代的對象。
 1 def myrange(arg):
 2     start = 0
 3     while True:
 4         if start > arg:
 5             return
 6         yield  start
 7         start += 1
 8 ret = myrange(3)
 9 r = ret.__next__()  #進入函數,找到yield,獲取yield後面的數據,每運行一次,生成器就會往下執行一個數值:
10 print(r)
11 r = ret.__next__()
12 print(r)
13 r = ret.__next__()
14 print(r)
15 r = ret.__next__()
16 print(r)
迭代器實例

 

3、用途:
socket的時候會用到,可是代碼複雜性增長
迭代器就相似於概念性的一個知識點
迭代器就是由__next__能夠一個一個提取的,相似於for循環的,逐步取值的,就叫作迭代器。
例如
一、一個列表,而後用for進行遍幣,其實就是執行了r = ret.__next__();
二、當迭代到最後一個值時,按理說取完後會報錯的,可是因爲封裝到foread
相關文章
相關標籤/搜索