術語概念解釋
關於 for 迴圈
寫乙個迭代器
1、迭代器協議
迭代器協議是一種約定,即物件必須提供乙個__next__方法,執行該方法要麼返回迭代中的下一項,要麼丟擲乙個 stopiteration 異常,終止迭代。
2、迭代器(iterator)
迭代器是一種物件,一種可以被 next() 函式呼叫並不斷返回下乙個值的物件(即滿足迭代器協議)。有時這種物件也叫迭代器物件。
ps: 生成器都是迭代器物件
3、可迭代物件(iterable)
提供了__iter__方法的物件叫做可迭代物件(__iter__方法返回乙個迭代器物件)。可迭代物件都可以直接作用於for迴圈,如 list、dict、tuple等。
ps: 迭代器物件一定是可迭代物件,可迭代物件不一定是迭代器物件,但可迭代物件都可以通過呼叫__iter__方法轉化成迭代器物件
ps: 乙個迭代器物件只能遍歷一次,第二次遍歷時不會返回值,因為已經迭代完了
class
iter
(object):
def__init__
(self, x)
: self.x = x
def__iter__
(self)
:return self
# 只執行一次,返回乙個迭代器物件
def__next__
(self)
: self.x +=
1if self.x >10:
raise stopiteration
return self.x
# 多次執行,每次返回迭代的下一項
sample = iter(1)
print
(next
(sample)
)# 2
print
(next
(sample)
)# 3
print
(next
(sample)
)# 4
for i in sample:
print
(i, end=
' ')
# 5 6 7 8 9 10
for i in sample:
print
(i, end=
' ')
# 這裡什麼都沒有
for迴圈的本質是先呼叫 iter() 函式將可迭代物件轉化為乙個迭代器物件,然後每次迴圈呼叫一次 next() 函式,得到迭代的下一項。
# 例如下
class
iter
(object):
def__init__
(self, x)
: self.x = x
def__iter__
(self)
:return self
# 必須返回迭代器物件
def__next__
(self)
: self.x +=
1if self.x >10:
raise stopiteration
return self.x
# 返回迭代的下一項
sample = iter(1)
for i in sample:
print
(i, end=
' ')
print(''
)sample_1 = iter(1)
# for 迴圈的執行過程如下
iterable =
iter
(sample_1)
# 先利用 iter() 函式將可迭代物件轉化為迭代器物件
n =10
while n >1:
print
(next
(iterable)
, end=
' ')
# 然後不斷的用 next() 函式呼叫迭代器物件,以返回下乙個值
n = n-
1
python迭代器的作用 python的迭代器
迭代是指能夠從序列中訪問出素的一種方式,在我們遍歷使用for.in.的物件都是可迭代物件。這裡需要補充一點的是python中一切都是物件。判斷乙個物件是否是可迭代物件可以通過instance函式 像我們常用的列表,字典,字串,集合,元組都是可迭代物件。那麼我們是否可以自定義乙個可迭代物件呢,答案是肯...
python迭代器作用 python中的迭代器
python中有一類工具叫做迭代工具,它能從左至右掃瞄物件。這包括了for迴圈 列表解析 in成員關係測試以及map內建函式等。可以用在上述迭代工具環境中,通過一次次迭代不斷產生結果的物件稱為可迭代物件,即是iterable。實際上可迭代物件分為兩大類,一種是實際儲存的序列,即列表 元組,字串 另一...
python中的迭代器 Python中的迭代器漫談
問題是在python中進行迴圈的時候產生的,熟悉python的都知道,它沒有類似其它語言中的for迴圈,只能通過for in的方式進行迴圈遍歷。最典型的應用就是通過range函式產生乙個列表,然後用for in進行操作,如下 usr bin env python for i in range 10 ...