迭代器和可迭代物件

2022-05-29 22:12:16 字數 1571 閱讀 2074

定義:可以進行迴圈更新的乙個實實在在的值,內部含有__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 判斷物件是否是可迭代物...