可迭代物件和迭代器

2021-09-18 03:22:28 字數 1483 閱讀 6914

建立這個物件的類中是否定義了__iter__() 方法, 如果定義了,那麼這個物件就是可迭代物件。

isinstance(***_obj, iterable) 判斷

判斷乙個物件是不是迭代器的時候,需要判斷建立這個例項物件的類中是否定義了__iter__()方法和__next__()方法,如果都定義了,那麼這個物件就是可迭代物件。所以如果乙個物件是迭代器,那麼它一定是乙個可迭代物件。

isinstance(***_obj, iterator) 判斷

自己建立乙個可迭代物件

from collections import iterator

class

classmate

(object):

def__init__

(self)

: self.names =

list()

self.current_num =

0# 例項屬性,乙個類所建立出來的例項屬性之間並不共有這些屬性

classmate.num =

0# 類屬性,所有的例項屬性共有這個屬性

defadd

(self, name)

:def

__iter__

(self)

:return self

def__next__

(self)

:if self.current_num <

len(self.names)

: ret = self.names[self.current_num]

self.current_num +=

1return ret

else

:raise stopiteration

classmate = classmate(

)print

(isinstance

(classmate, iterator)

)classmate.add(

'ff'

)classmate.add(

'gg'

)classmate.add(

'kk'

)for i in classmate:

print

(i)

有了上面建立的可迭代物件,可以看看用for迴圈遍歷乙個這個物件的時候經歷了什麼樣的過程:

判斷***_obj是否是可迭代物件(即建立***_obj例項物件的類裡面是否含有__iter__方法)

滿足1的情況下呼叫內建函式iter(***_oj), 會呼叫類中的__iter__方法返回乙個迭代器***_obj_iterator(建立***_obj例項物件的類裡面含有__next__方法)

再呼叫內建函式next(***_obj_iterator), 會呼叫類中的__next__方法,每次返回乙個值

當__next__返回值的索引大於物件的長度,就會引發異常stopiteration, 結束__next__方法,for迴圈完成

迭代器和可迭代物件

本篇文章簡單談談可迭代物件,迭代器和生成器之間的關係。三者簡要關係圖 可迭代物件與迭代器 剛開始我認為這兩者是等同的,但後來發現並不是這樣 下面直接丟擲結論 1 可迭代物件包含迭代器。2 如果乙個物件擁有 iter 方法,其是可迭代物件 如果乙個物件擁有next方法,其是迭代器。3 定義可迭代物件,...

可迭代物件和迭代器

實現了 iter 方法的物件稱為可迭代物件,在python中,可迭代物件有字串 列表 元組 字典 集合等 class mynumbers def init self self.a 1 def iter self return self my numbers mynumbers 判斷物件是否是可迭代物...

可迭代物件和迭代器

迭代器即迭代的工具,那什麼是迭代呢?迭代是乙個重複的過程,每次重複即一次迭代,並且每次迭代的結果都是下一次迭代的初始值 while true 只是單純地重複,因而不是迭代 print l 1,2,3 count 0 while count len l 迭代 print l count count 1...