在復(fù)習(xí)Python基本語法的時候祷杈,看到了迭代器模塊诉字,做一個簡單的筆記孤里。
Iterable:
所謂可迭代數(shù)據(jù)流黄选,即能直接參與for循環(huán)的數(shù)據(jù)類型:Iterable
一類是集合數(shù)據(jù)類型蝇摸,如list / tuple / dict / set / str /等;
一類是generator,包括生成器和帶yield的generator function办陷。
關(guān)于帶yield的函數(shù)可以參考廖老師的教程https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
另外貌夕,生成器本身的next()函數(shù)也可以持續(xù)返回下一個值
Iterator:
迭代器,可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器民镜。
所以啡专,list / tuple / dict / set / str 之流是無法成為迭代器的,因為的Iterator對象表示的是一個不限大小的數(shù)據(jù)流制圈,Iterator對象可以被next()函數(shù)調(diào)用并不斷返回下一個數(shù)據(jù)们童,直到?jīng)]有數(shù)據(jù)時拋出StopIteration錯誤【校可以把這個數(shù)據(jù)流看作是一個有序序列慧库,但我們卻不能提前知道序列的長度,只能不斷通過next()函數(shù)實現(xiàn)按需計算下一個數(shù)據(jù)馋嗜,所以Iterator的計算是惰性的齐板,只有在需要返回下一個數(shù)據(jù)時它才會計算。
集合數(shù)據(jù)類型如 list / dict / str / 等是Iterable可迭代對象但不是Iterator迭代器嵌戈,不過可以通過iter()函數(shù)可以獲得一個Iterator對象覆积。
最后,幫助文檔在這里https://docs.python.org/2/library/itertools.html#itertools.count