一、可迭代的物件(Iterable)
1、定義:可以直接用在回圈的資料型別,如list,tuple,dict,set,str,還有generator(生成器),
和帶yield的函式,這些直接可以用在回圈的物件統稱為可迭代物件(Iterable)
from collections import Iterable print(isinstance([], Iterable)) print(isinstance((), Iterable)) print(isinstance({}, Iterable)) print(isinstance("abc", Iterable)) print(isinstance((x for x in range(10)), Iterable)) # 生成器也是可迭代物件 print(isinstance(10, Iterable)) # 數字不是可迭代物件
二、迭代器(Iterator)
1、定義:生成器不但可以用在回圈中,還能用next()不斷呼叫回傳下一個值,直到爆出StopIteration例外,
2、可迭代物件和迭代器和區別:迭代器和可迭代物件不是同個概念,區別在于是否有next函式(可以用dir(object)來查看此物件的所有支持的函式),
from collections import Iteratorprint(isinstance([], Iterator)) print(isinstance((), Iterator)) print(isinstance({}, Iterator)) print(isinstance("abc", Iterator)) print(isinstance((x for x in range(10)), Iterator)) # 生成器是迭代器 print(isinstance(10, Iterator)) # 數字不是迭代器物件
三、可迭代物件與迭代器之間的轉換
1、使用iter()函式將可迭代物件轉換成迭代器,
list1 = iter([1,2,3,4,5]) print(list1.__next__()) print(list1.__next__())
2、為什么像list,string,tuple這樣的可迭代物件不是迭代器?
因為這些資料結構是將已經存在的資料賦值他們,而迭代器是惰性計算的程式流,他甚至沒有資料,所以可迭代物件只能表示有限的元素個數,而迭代器甚至可以表示整個自然數集合,
四、python很多功能都有迭代器的影子,舉一些內置迭代器的例子
1、回圈用到的range(),其實就是一個迭代器,比如range(10000),不是生成一個10000個元素的集合,而內置了next函式,逐個生成,
2、檔案呼叫的時候file.redelines(),是回傳一個串列,而 for line in file: 則是迭代器中逐行前進,也是內置了next函式
五、小結:迭代器是一個概念,其實就是生成器的應用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/160776.html
標籤:Python
上一篇:Python學習筆記:生成器(Generator)詳解
下一篇:美白,磨皮,搞笑圖片處理
