可迭代物件(iterable):可以直接作用於for迴圈的物件統稱為可迭代物件。可以用isinstance()去判斷乙個物件是否是可迭代物件(iterable)。
可以直接作用於for的資料型別一般分兩種:
1、集合資料型別,如list、tuple、dict、set、string
2、generator,包括生成器和帶yield的generator function
在講解迭代器之前,我們先來了解一下isinstance()。語法:isinstance(object, classinfo)
引數:object – 例項物件。
classinfo – 可以是直接或間接類名、基本型別或者由它們組成的元組。
對於基本型別來說 classinfo 可以是:int,float,bool,complex,str(字串),list,dict(字典),set,tuple。返回值:classinfo 的字串是 str 而不是 string,字典也是簡寫 dict。
如果物件的型別與引數二的型別(classinfo)相同則返回 true,否則返回 false。。
from collections.abc import iterable
print
(isinstance([
],iterable)
)#返回true 因為list是可迭代物件
print
(isinstance((
),iterable)
)#返回true 因為tuple是可迭代物件
print
(isinstance
(,iterable)
)#返回true 因為dict是可迭代物件
print
(isinstance(""
,iterable)
)#返回true 因為string是可迭代物件
print
(isinstance
((x for x in
range(10
)),iterable)
)#返回true 是可迭代物件
print
(isinstance(1
,iterable)
)#返回false
我們簡要理解(x for x in range(10))前面的那乙個x是該迭代器生成的列表中每乙個元素要代入的表示式,後面的for x in range(10)得出x的取值範圍代入前面的x,得到生成的乙個列表。
迭代器(iterator物件):不但可以作用於for迴圈,還可以被next()函式不斷呼叫並返回下乙個值,直到最後丟擲乙個stopiteration錯誤,表示無法繼續返回下乙個值。
如何判斷是否是乙個iterator物件(迭代器)?可以用isinstance()函式判斷乙個物件是否是iterator物件
from collections.abc import iterator
print
(isinstance([
],iterator)
)#返回false
print
(isinstance((
),iterator)
)#返回false
print
(isinstance
(,iterator)
)#返回false
print
(isinstance(""
,iterator)
)#返回false
print
(isinstance
((x for x in
range(10
)),iterable)
)#返回true
#可得只有(x for x in range(10)才是迭代器
我們來驗證一下x for x in range(10))以及與這個相似的,是否符合迭代器的定義。
第乙個:x for x in range(5)
l =
(x for x in
range(5
))print
(next
(l))
#0print
(next
(l))
#1print
(next
(l))
#2print
(next
(l))
#3print
(next
(l))
#4#print(next(l)) #報錯stopiteration
第二個:x for x in [23,4,5,64,3435]
l =
(x for x in[23
,4,5
,64,3435])
print
(next
(l))
#23print
(next
(l))
#4print
(next
(l))
#5print
(next
(l))
#64print
(next
(l))
#3435
#print(next(l)) #報錯stopiteration
他們符合迭代器的定義,所以都是迭代器。
返回值:迭代器物件
我們使用iter( )可以將list轉成iterator物件
例:
a =
iter([
1,2,
3,4,
5])print
(next
(a))
#1print
(next
(a))
#2print
(next
(a))
#3print
(next
(a))
#4print
(next
(a))
#5a =
iter([
1,2,
3,4,
5])for i in a:
print
(i)'''12
345'''
元組,字典,字串也可以,我們直接用isinstance( )函式來判斷列表、元組,字典,字串通過iter( )是否變成了iterator物件。
from collections.abc import iterator
print
(isinstance
(iter([
]),iterator)
)#返回true
print
(isinstance
(iter((
)),iterator)
)#返回true
print
(isinstance
(iter()
,iterator)
)#返回true
print
(isinstance
(iter(""
),iterator)
)#返回true
和上面的對比通過使用iter()將列表,元組,字典,字串轉化成了iterator物件。 python迭代 可迭代物件與迭代器物件
問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...
python 迭代器與可迭代物件
主要有兩個方法next 與iter next不斷返回下乙個元素,知道元素全部返回後出現異常,可以節省記憶體空間。iter是迭代,可以把乙個列表直接轉換成迭代器,然後使用next 方法。data list 1,2,3,4,5 data list iter data list print next da...
Python 迭代器與可迭代物件
迭代器可以讓我們訪問集合的時候變得非常方便。之前我們通過for.in.的方式訪問乙個集合的時候,就是使用迭代器完成的。如果沒有迭代器,那麼我們只能通過while迴圈,每次迴圈的時候通過下標訪問了。可以直接使用for迴圈遍歷的物件,成為可迭代的物件,常見的可迭代的物件有 list tuple dict...