可迭代物件Iterable和迭代器物件Iterator:
可迭代物件:
滿足前提:
可以被回圈操作的物件,就是可迭代物件
舉例:str、list、tuple、set、dict、range、generator...
如何高效的檢測一個物件是否是可迭代物件?
可以使用collections模塊中的Iterable型別配合isinstance(obj,type)內置函式來判斷即可
操作步驟如下:
步驟一:匯入collections模塊
步驟二:collections.Iterable(型別)配合內置函式isinstance()來進行判斷,代碼如下:
isinstance(obj,collections.Iterable)
如果回傳值為True,那么它就是一個可迭代物件
如果回傳值為False,那么它不是一個可迭代物件
演示如何判斷是否是可迭代物件
import collections
str1 = 'abcdefg'
lt = [1,2,3,4,5]
tp = (10,20,30)
s = {100,200,300,400}
dic1 = {'aa':'AA','bb':'BB'}
r = range(10)
gen = (x for x in range(5))
print(isinstance(str1,collections.Iterable)) #True
print(isinstance(lt,collections.Iterable)) #True
print(isinstance(tp,collections.Iterable)) #True
print(isinstance(s,collections.Iterable)) #True
print(isinstance(dic1,collections.Iterable)) #True
print(isinstance(r,collections.Iterable)) #True
print(isinstance(gen,collections.Iterable)) #True
print(isinstance(100,collections.Iterable)) #False 對于這種整數型資料100沒有回圈的概念
迭代器物件:
滿足前提:
1).必須是一個可迭代物件
2).可以被next()函式所呼叫的
舉例:generator...
如何高效的檢測一個物件是否是迭代器物件?
可以使用collections模塊中的Iterator型別配合isinstance(obj,type)內置函式來判斷即可
操作步驟如下:
步驟一:匯入collections模塊
步驟二:collections.Iterator(型別)配合內置函式isinstance()來進行判斷,代碼如下:
isinstance(obj,collections.Iterator)
如果回傳值為True,那么它就是一個可迭代物件
如果回傳值為False,那么它不是一個可迭代物件
演示是否是迭代器物件
import collections
str1 = 'abcdefg'
lt = [1,2,3,4,5]
tp = (10,20,30)
s = {100,200,300,400}
dic1 = {'aa':'AA','bb':'BB'}
r = range(10)
gen = (x for x in range(5))
print(isinstance(str1,collections.Iterator)) #False
print(isinstance(lt,collections.Iterator)) #False
print(isinstance(tp,collections.Iterator)) #False
print(isinstance(s,collections.Iterator)) #False
print(isinstance(dic1,collections.Iterator)) #False
print(isinstance(r,collections.Iterator)) #False
print(isinstance(gen,collections.Iterator)) #Ture 只有gen能被next()函式呼叫
以下代碼有問題:問題在于iterator物件才能被next()函式所呼叫
# print(next(lt)) #TypeError
再談型別轉換:
將可迭代物件轉換為迭代器物件
內置函式:iter(iterable)
#假設一個內置函式iter()里面必須傳入一個叫iterable物件,將可迭代物件轉換成迭代器物件
#內置函式iter 傳入lt物件 回傳給it1物件
lt = [1,2,3,4,5]
tp = (10,20,30)
it1 = iter(lt)
print(it1,type(it1)) #<tuple_iterator object at 0x00000000021BD160> <class 'tuple_iterator'>
it2 = iter(tp)
print(it2,type(it2))
print(next(it1)) #1
print(next(it2)) #10
#print(next(lt)) 而直接next()是會報錯的,因為next()不會執行lt物件型別 TypeError: 'list' object is not an iterator
以下代碼有問題:
因為3.14屬于float型別,它并不是一個Iterable(可迭代物件),
所以不能被iter()函式轉換稱為Iterator(迭代器物件)
# obj = iter(3.14)
# print(obj,type(obj))
【注意事項】:
內置函式:
iter(iterable)必須只能呼叫可迭代物件,否則報錯
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179268.html
標籤:Python
上一篇:21.python生成器
下一篇:串列[1,2,3,4,5],請使用map()函式輸出[1,4,9,16,25],并使用串列推導式提取出大于10的數,最終輸出[16,25]
