定義:可以進行迴圈更新的乙個實實在在的值,內部含有__iter__
方法的物件,叫可迭代物件,如,str list dict set range
s1 = 'sadf'
print('__iter__' in dir(s1)) # 判斷s1變數是否為可迭代物件
print('__iter__' in dir(range)) # 判斷ranage是否為可迭代物件
# dir() 函式不帶引數時,返回當前範圍內的變數、方法和定義的型別列表;帶引數時,返回引數的屬性、方法列表。如果引數包含方法__dir__(),該方法將被呼叫。如果引數不包含__dir__(),該方法將最大限度地收集引數資訊。
可迭代物件:操作方法比較多,比較直觀,儲存資料相對少的資料集(幾百萬個物件8g記憶體),當你側重於對資料可以靈活處理,並且記憶體空間足夠,將資料集設定為可迭代物件是明確的選擇
定義:內部含有__iter__
方法並且含有__next__
方法的物件就是迭代器
# 判斷檔案控制代碼是否為乙個迭代器
with open('bb.txt',encoding='utf-8',mode='r') as f:
print(('__iter__' in dir(f) and '__next__' in dir(f)))
#判斷變數s1是否為迭代器
s1 = 'sadf'
print(('__iter__' in dir(s1) and '__next__' in dir(s1)))
l1 = [1, 3, 4, 4, 5]
obj = iter(l1) # 轉換列表為迭代器
print(next(obj)) # 一起取乙個值,超出會報錯
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
l1 = [ i for i in range(1,10)]
obj = iter(l1)
for i in range(3):
print(next(obj))
for i in range(4):
print(next(obj))
迭代器:是乙個非常節約記憶體,可以記錄儲存位置,可以直接通過迴圈next方法取值,但是不直觀,操作方法比較單一,因此當你資料量比較大的時候或者以節約記憶體為首選,將資料設定成可迭代器是不錯的選擇
利用while迴圈模擬for迴圈對可迭代物件進行取值的機制
l1 = [ i for i in range(1,10)]
obj = iter(l1)
while 1:
try:
print(next(obj))
except stopiteration: # 如果出現stopiteration錯誤停止程式
break
迭代器和可迭代物件
本篇文章簡單談談可迭代物件,迭代器和生成器之間的關係。三者簡要關係圖 可迭代物件與迭代器 剛開始我認為這兩者是等同的,但後來發現並不是這樣 下面直接丟擲結論 1 可迭代物件包含迭代器。2 如果乙個物件擁有 iter 方法,其是可迭代物件 如果乙個物件擁有next方法,其是迭代器。3 定義可迭代物件,...
可迭代物件和迭代器
建立這個物件的類中是否定義了 iter 方法,如果定義了,那麼這個物件就是可迭代物件。isinstance obj,iterable 判斷 判斷乙個物件是不是迭代器的時候,需要判斷建立這個例項物件的類中是否定義了 iter 方法和 next 方法,如果都定義了,那麼這個物件就是可迭代物件。所以如果乙...
可迭代物件和迭代器
實現了 iter 方法的物件稱為可迭代物件,在python中,可迭代物件有字串 列表 元組 字典 集合等 class mynumbers def init self self.a 1 def iter self return self my numbers mynumbers 判斷物件是否是可迭代物...