迭代意味著重複很多次,就像迴圈那樣。for迴圈能迴圈(迭代)序列和字典,但實際上也可迭代其他物件—實現方法iter的物件,這時,就需要用到迭代器。
迭代器是包含在乙個類裡面的,示例如下:
_metaclass_=type
classdiedaiqi:
value=0
def _next_(self):
self.value+=1
if self.value>10:
raise stopiteration
return self.value
def _iter_(self):
return self
ti =diedaiqi()
list(ti)
這是乙個簡單的迭代器,使用這個迭代器可以用來建立乙個包含從1到10的整數的列表,實際上也就是迴圈了10次,每次得到乙個數。
ps:使用迭代器的最主要原因,是它比列表更簡單優雅,更方便。此外,還可以藉此用來建立乙個生成器。生成器是一種使用普通函式語法定義的迭代器。生成器實際上更方便了人們編寫**,但實際上無論任何**,都可以不使用生成器。
對生成器而言,最特殊的地方在於yield語句,只要包含yield語句的函式都被稱為生成器。但其行為與腹痛函式截然不同。區別在於,生成器不是使用return返回乙個值,而是可以生成多個值,每次乙個。
shengchegnqi(nested):
for diyiceng in nested:
for dierceng in diyiceng:
yield dierceng
nested=[[1,2],[3,4],5]
for i in shenghcengqi (nested):
print(i)
高亮部分為編寫的乙個生成器,下面是想要實現的功能,即列印出這些值,為了列印出這些值,使用了迭代的思想。這也就是說,為什麼生成器與迭代器聯絡緊密。
def flatten(nested):
try:
try:nested + ''
except typeerror:
pass
else:
raise typeerror
for sublist in nested:
for element in flatten(sublist):
yield element
except typeerror:
yield nested
print(list(flatten([『foo』,[『bar』,[『baz』]]])))
上述**是乙個遞迴式生成器,可以使用多層巢狀,且無論物件是什麼型別,都可以引發typeerror
異常,即可以迭代。
事實上,生成器是包含關鍵字yield的函式,但被呼叫時不會執行函式體內的**,而是返回乙個迭代器。每次請求值時都將執行生成器的**,知道遇到yield或return。
簡而言之,生成器由兩個單獨的部分組成:生成器的函式
和生成器的迭代器
。生成器由def語句定義,包含yield語句,而迭代器用來返回結果。
Python入門(六) 迭代
1 迭代的概念 在python中,如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們成為迭代 iteration 在python中,迭代是通過 for in 來完成的。迭代操作就是對於乙個集合,無論該集合是有序 還是無序,我們用 for 迴圈總是可以...
簡述Python迭代器
物件必須提供乙個next方法,執行方法要麼返回迭代器的下一項,要麼就引起乙個stopiteration異常,以終止迭代。協議是一種約定,可迭代物件實現了迭代器協議,python的內部工具 如for迴圈,sum min max函式等 使用迭代器協議訪問物件。實現了迭代器協議的物件叫可迭代物件,滿足以下...
Python快速入門 簡述
web應用開發 作業系統管理 伺服器維護的自動化指令碼 科學計算 桌面軟體 伺服器軟體 網路軟體 遊戲構思實現,產品早期原型和迭代 1 print函式代替print語句 python 2.x print 3,4 3,4 python 3.x print 3,4 3 42 python 3.x預設使用...