迭代是訪問集合元素的一種方式。
迭代器是乙個可以記住遍歷的位置的物件。
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。
迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
字串,列表或元組物件都可用於建立迭代器。
>>
> list=[1
,2,3
,4]>>
> it =
iter
(list) # 建立迭代器物件
>>
> print (
next
(it)
) # 輸出迭代器的下乙個元素
1>>
> print (
next
(it))2
>>
>
迭代器物件可以使用常規for語句進行遍歷:
list=[1
,2,3
,4]it =
iter
(list) # 建立迭代器物件
for x in it:
print (x, end=
" ")
輸出結果:12
34
或者用next()函式
import sys # 引入 sys 模組
list=[1
,2,3
,4]it =
iter
(list) # 建立迭代器物件
while true:
try:
print (
next
(it)
) except stopiteration:
sys.
exit()
輸出結果:12
34
把乙個類作為乙個迭代器使用需要在類中實現兩個方法 __iter__
() 與 __next__
() 。
__iter__
() 方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了 __next__
() 方法並通過 stopiteration 異常標識迭代的完成。
__next__
() 方法(python 2 裡是 next
())會返回下乙個迭代器物件。
stopiteration 異常用於標識迭代的完成,防止出現無限迴圈的情況,在 __next__
() 方法中我們可以設定在完成指定迴圈次數後觸發 stopiteration 異常來結束迭代。
在 20 次迭代後停止執行:
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
: raise stopiteration
myclass =
mynumbers()
myiter =
iter
(myclass)
for x in myiter:
print
(x)輸出結果:12
3456
78910
1112
1314
1516
1718
1920
使用了 yield 的函式被稱為生成器(generator)。
跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。
在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。
呼叫乙個生成器函式,返回的是乙個迭代器物件。
#使用 yield 實現斐波那契數列:
#!/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()
輸出結果:01
1235
8132134
55
python基礎 迭代器與生成器
迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不能後退。迭代器有兩個基本的方法 iter 和 next list 1,2,3,4 it iter list 建立迭代器...
python基礎 迭代器 與 生成器
迭代器1.是一種訪問集合元素的方式。2.可以記住遍歷位置 3.從集合的第乙個元素開始訪問,到最後乙個元素訪問完結束。不能後退。4.兩個基本方法 iter 和 next 也可以理解為有這兩個方法就是迭代器 5.字串 列表 元組 都可以用於建立迭代器 6.支援用for進行遍歷 list1 2,4,543...
Python生成器與迭代器
生成器只有在用的時候會出現在記憶體中,對比列表全部存在記憶體中,減少了記憶體占用 next 函式 依次取生成器的值 s x 2 for x in range 1000 中括號是列表解析,小括號表示生成一系列值,就是生成器 s at 0x7fa20aa8b048 print next s 用next ...