迭代是python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是乙個可以記住遍歷的位置的物件。
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter()和 next()。
字串,列表或元組物件都可用於建立迭代器:
例項(python 3.0+)
>>
>list=[1
,2,3
,4]>>
> it =
iter
(list) # 建立迭代器物件
>>
> print (
next
(it)
) # 輸出迭代器的下乙個元素
1>>
> print (
next
(it))2
>>
>
迭代器物件可以使用常規for語句進行遍歷:
例項(python 3.0+)
#!
/usr/bin/python3
list=[1
,2,3
,4]it =
iter
(list) # 建立迭代器物件
for x in it:
print
(x, end=
" ")
執行以上程式,輸出結果如下:
123
4
也可以使用 next() 函式:
例項(python 3.0
+)
#!
/usr/bin/python3
import sys # 引入 sys 模組
list=[1
,2,3
,4]it =
iter
(list) # 建立迭代器物件
while true:
try:
print (
next
(it)
) except stopiteration:
sys.
exit
()
執行以上程式,輸出結果如下:
1234
把乙個類作為乙個迭代器使用需要在類中實現兩個方法__iter__()與__next__()。
如果你已經了解的物件導向程式設計,就知道類都有乙個建構函式,python 的建構函式為__init__(), 它會在物件初始化的時候執行。
iter()方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了__next__()方法並通過 stopiteration 異常標識迭代的完成。
next()方法(python 2 裡是next())會返回下乙個迭代器物件。
建立乙個返回數字的迭代器,初始值為 1,逐步遞增 1:
例項(python 3.0+)
class mynumbers:
def __iter__
(self)
:
self.a =
1return self
def __next__
(self)
:
x = self.a
self.a +=1
return x
myclass =
mynumbers()
myiter =
iter
(myclass)
print
(next
(myiter)
)print
(next
(myiter)
)print
(next
(myiter)
)print
(next
(myiter)
)print
(next
(myiter)
)
執行輸出結果為:
12345
stopiteration 異常用於標識迭代的完成,防止出現無限迴圈的情況,在__next__()方法中我們可以設定在完成指定迴圈次數後觸發 stopiteration 異常來結束迭代。
在 20 次迭代後停止執行:
例項(python 3.0+)
class mynumbers:
def __iter__
(self)
:
self.a =
1return self
def __next__
(self)
:if self.a <=
20:
x = self.a
self.a +=1
return x
else
:
raisestopiteration
myclass =
mynumbers()
myiter =
iter
(myclass)
for x in myiter:
print
(x)
執行輸出結果為:
123
4567
891011
1213
1415
1617
1819
20
在 python 中,使用了yield的函式被稱為生成器(generator)。
跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。
在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield的值, 並在下一次執行 next() 方法時從當前位置繼續執行。
呼叫乙個生成器函式,返回的是乙個迭代器物件。
以下例項使用 yield 實現斐波那契數列:
例項(python 3.0+)
#!
/usr/bin/python3
import sys
def fibonacci
(n): # 生成器函式 - 斐波那契
a, b, counter =0,
1,0while true:
if(counter > n)
:return
yield a
a, b = b, a + b
counter +=1
f =fibonacci(10
) # f 是乙個迭代器,由生成器返回生成
while true:
try:
print (
next
(f), end=
" ")
except stopiteration:
sys.
exit
()
執行以上程式,輸出結果如下:
011
2358
1321
3455
Python3 迭代器與生成器
迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1 2,3 ...
python3 迭代器與生成器
生成器yield 在python中,使用了yield的函式被稱為生成器 generator 跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。在呼叫生成器的執行過程中,每次遇到yield時函式會暫停並儲存當前所有執行資訊,返回yield的值。並在下...
Python3 迭代器與生成器
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。使用iter 定義迭代器,使用next 訪問迭代器的下乙個元素。當迭代器中沒有下乙個元素時,繼續使用next 則會丟擲stopiteration異常。author timax liu import sys 宣告迭代器兩種方式 iter...