博客地址:http://www.cnblogs.com/yudanqu/
1、可迭代對象
- 在介紹迭代器之前呢,我們先聊一下可迭代對象(Iterable),可迭代對象就是可以直接作用於for循環的對象。
- 那么什么是可以直接用於for循環的呢?
- 可以直接用於for的數據類型一般分為兩種:
1、集合數據類型,如list、tuple、dict、set、string……
2、generator,包括生成器和帶yield的generator function
- 那么我們如何判斷一個對象是否是可迭代對象呢?答:isinstance()
************************************************************************************************************************************
描述:isinstance() 函數來判斷一個對象是否是一個已知的類型
語法:isinstance(object, classinfo)
參數:(1)object -- 實例對象
(2)classinfo -- 可以是直接或間接類名、基本類型或者由它們組成的元組
返回值:如果對象類型與classinfo的類型相同則返回True,否則返回False
************************************************************************************************************************************
那么我下面給大家看個小栗子:
在這里面,首先我導入的Iterable的包,也就是可迭代對象,下面的四條語句是分別查看列表、元組、字典、字符串的類型,可以看到他們四個都是可迭代對象,當然,可迭代對象遠不止這些,這里只是給大家一個概念,並且看一下isinstance的使用方法。如果你還不能理解的話,可以想一下,你有沒有寫過這樣一句話(for i in [1,2,3,4,5]),這是一個循環的表示方法,這里面就是在循環列表中的元素,來實現內部語句塊。也可以說成是遍歷這個列表,當然也就是迭代了。
2、迭代器
迭代器就是不但可以作用於for循環,還可以被next()不斷的調用並返回下一個值,知道最后拋出一個錯誤StopIteration錯誤,表示無法繼續返回下一個值。
對比:
可以被next()函數調用並不斷返回下一個值得對象稱為迭代器 (Iterator) 可以直接作用於for循環的對象統稱為可迭代對象(Iterable)
下面又是一個小栗子:
里面的isinstance依然是判斷類型,我們可以看到,(x for x in range(5))是一個迭代器,我們可以把這個迭代器用一個屬性來接收,這樣方便我們調用。注意上面提到的,迭代器是可以被next()調用的,所以我們next(L)來迭代輸出里面的值。
現在的這些返回值為False,大家應該了解他的原因了吧,[](){}"" 等等這些都只是可迭代對象,而不是迭代器。(注意那兩個單詞是不一樣的)
除此之外還需要說明的一點是,其他的數據類型也可以轉為迭代器:
# 例如:列表轉迭代器: a = iter([1,2,3,4]) print(next(a))
元組,字符串,字典都可以這樣。
*下面用一個小案例讓大家看下他的用法
endstr = 'end' str = "" for line in iter(input,endstr): str += line + '\n' print(str) #目的就是為了使input不直接退出,可以換行繼續輸入;而且在打印str時也可以分行同時打印
看一下效果:
迭代器大概就先介紹到這里,歡迎大家和我來一起學習。
作者:漁單渠(yudanqu)