Python可迭代物件和迭代器的區別


什麼是可迭代物件?

可迭代物件可以粗略地定義為一個物件,當傳遞給內建方法iter()時,會生成一個迭代器。要成為可迭代物件,物件需要滿足幾個條件:該類的物件需要定義兩個例項方法:__len__和__getitem__。滿足這些條件的物件,當傳遞給iter()方法時,會生成一個迭代器。

迭代器

迭代器定義為一個透過內部狀態變數計數迭代的物件。在這種情況下,當迭代越過最後一項時,變數不會設定為零,而是引發StopIteration()來指示迭代結束。

可迭代物件與迭代器

讓我們來看一個例子,檢查可迭代物件和迭代器之間的區別:

基礎 可迭代物件 迭代器
什麼? 可迭代的物件是可迭代物件。 迭代器定義為一個透過內部狀態變數計數迭代的物件。
關係 每個迭代器都是可迭代的。 並非每個可迭代物件都是迭代器。
迭代方法 當傳遞給內建方法iter()時,會生成一個迭代器的物件。 使用next()進行迭代。
列表 列表是可迭代的。 列表不是迭代器。

例子

在下面的例子中,我們有一個Cars類,它既是可迭代的又是迭代器。Cars類是一個迭代器,因為它實現了:

  • __iter__ 方法返回物件本身;

  • __next__ 方法從列表中返回下一項。

Cars類也是可迭代的,因為它實現了:

  • __iter__ 方法返回物件本身,它是一個迭代器。

讓我們看看這個例子:

class Cars: def __init__(self): self.rgb = ['bmw', 'audi', 'benz', 'tesla'] self.__index = 0 def __iter__(self): return self def __next__(self): if self.__index >= len(self.rgb): raise StopIteration # return the next car name car = self.rgb[self.__index] self.__index += 1 return car

更新於:2022年8月12日

729 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.