python建立可以迭代的類

2021-10-05 02:46:36 字數 2343 閱讀 2560

python中可以使用 for … in …進行遍歷(迭代)的資料型別,都是可迭代的物件。如 列表,字串,字典,元組 都是可迭代的(iterable),而浮點數,整型,布林值都是不可迭代。

for i in[1

,2,3

,4]:

print

(i)for i in

"abcd"

:print

(i)for i in

:print

(i)for i in

("tupe1"

,"tupe2"

,"tupe3"):

print

(i)

執行結果

判斷乙個物件是否可迭代

from collections.abc import iterable

list1=[1

,2,3

]print

(isinstance

(list1, iterable)

)# 結果為 true

迭代的過程實質上就是對 資料進行逐條的讀取返回,直到所有資料均被迭代完成。python內部通過迭代器(iterator)來實現這個功能。

可迭代的物件首先通過__iter__生成乙個迭代器, 然後對該迭代器不斷呼叫__next__方法,逐條返回迭代資料,從而實現對資料的迭代。

當使用 for … in …時,執行本質如下: 先通過 iter()方法返回資料的迭代器,然後通過next()方法進行逐條讀取。

seq=[1

,2,3

,4]diedaiqi =

iter

(seq)

# iter()函式獲取資料的迭代器

while

true

:try

: i =

next

(diedaiqi)

#next()函式返回迭代器的下乙個值

except stopiteration:

#當迭代到沒有資料時,退出

break

print

(i)

iter()方法 呼叫的為物件內部的__iter__()方法, next() 呼叫的物件內部的__next()__方法,所以當我們自定義迭代器時,需要使用這兩種方法。

#定義乙個可迭代的類

class

test

(object):

def__init__

(self,data1)

: self.data1=data1

self.data2=

0def

__iter__

(self)

:return self

def__next__

(self)

:if self.data2 < self.data1:

self.data2 +=

1return self.data2

else

:raise stopiteration

for i in test(5)

:print

(i)# 結果12345

__iter__方法是在__next__方法之前執行的,所以如果不用__next__,可以在__iter__便返回乙個生成器,也可實現類的迭代

class

test

(object):

def__init__

(self,data1)

: self.data1=data1

self.data2=

0 self.get_dict=

defdict1

(self)

: x=

1 y=

2 self.get_dict=

return self.get_dict

def__iter__

(self)

: test.dict1(self)

for q in self.get_dict:

yield self.get_dict[q]

for i in test(5)

:print

(i)#結果

05

Python實現可以切片的物件和可以迭代的物件

可以切片的物件class company object def init self,employee list self.employee employee list def getitem self,item 魔法函式 雙下劃線開頭 雙下劃線結尾 return self.employee item...

python迭代 python的迭代

好的,今天仔細想想,我昨天那篇文章好像講的都是廢話,因為現在還在學基礎,講網路爬蟲好像不太合適,儘管只是講乙個大概。好的,今天我們繼續來學習python基礎語法,python的迭代。在上上篇文章中,我們講了for迴圈,然後我們提到了迭代這個概念,意思就是說從頭數到尾,嗯,就這麼簡單。我們今天主要是要...

python學習 迭代器及其建立

迭代器物件從集合的第乙個元素開始訪問,直到所有的元素訪問結束,只能往前不能後退 iterable iter seq 建立迭代器物件 next iterable 訪問迭代器的下乙個元素 迭代器物件可以使用 for 語句進行遍歷 演示如下 建立迭代器 通過編寫方法 iter 和方法 next 可以將類作...