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 可以將類作...