迭代器迭代是Python最強大的功能特色,,是遍歷訪問序列元素的一種方式,。 迭代器的特性是: 可以記住當(dāng)前遍歷位置 只能往前遍歷,不能后退 從序列的第一個元素開始訪問,,直至所有元素被訪問完 有兩個基本方法: iter() 和 next() 字符串,、列表或元組對象可以用于創(chuàng)建迭代器
下面看以下實例: # -*- coding:utf-8 -*- __author__ = '苦葉子'
import sys
if __name__ == "__main__":
seq_tuple = (1, 2, 3, 4, 5) # 創(chuàng)建迭代器
seq_it = iter(seq_tuple) # 訪問打印第一個元素
print("第一個元素:%s" % next(seq_it)) # 訪問打印第二個元素
print("第二個元素:%s" % next(seq_it)) # 訪問打印第三個元素
print("第三個元素:%s" % next(seq_it)) # 使用for循環(huán)來遍歷迭代器對象
print("\nfor循環(huán)遍歷迭代器對象: ")
for_it = iter(seq_tuple) for x in for_it: print(x, end=' ') # 使用while結(jié)合next遍歷迭代器對象
print("\n\nwhile & next遍歷迭代器對象: ")
while_it = iter(seq_tuple) while True:
try: print(next(while_it))
except StopAsyncIteration:
sys.exit() 運行結(jié)果如下: Traceback (most recent call last):
File "D:/版權(quán)/快學(xué)Python3/samples/迭代器.py", line 33, in <module>
print(next(while_it))
StopIteration
第一個元素:1 第二個元素:2 第三個元素:3
for循環(huán)遍歷迭代器對象:
1 2 3 4 5
while & next遍歷迭代器對象:
1 2 3 4 5 請注意上述才異常拋出,因為這里已經(jīng)遍歷超出了序列的邊界了,。 生成器在Python中使用了yield的函數(shù),,我們稱之為生成器,。 與普通函數(shù)不同的是:生成器返回的是一個迭代器的函數(shù),只能用于迭代操作,,直接理解就是:生成器就是功能更強大的迭代器,。 在調(diào)用生成器的過程中,每次遇到y(tǒng)ield時,,函數(shù)就會暫停并保存當(dāng)前運行狀態(tài),,返回yield的值,并在下一次執(zhí)行next() 方法時從當(dāng)前位置繼續(xù)運行,。 下面我們通過使用生成器來實現(xiàn)斐波那契數(shù)列: # -*- coding:utf-8 -*-
__author__ = '苦葉子'
import sys
# 生成器函數(shù) # 實現(xiàn)斐波那契數(shù)列 def fibonacci(n):
# 初始化變量
a, b, count = 0, 1, 0
while True: if count > n: return
yield a
a, b = b, a + b
count = count + 1
if __name__ == "__main__": # 初始化生成器函數(shù),產(chǎn)生一個生成器函數(shù)
f = fibonacci(10) while True: try:
print(next(f), end=' ') except StopAsyncIteration:
sys.exit(0) 運行結(jié)果如下: C:\Python36\python.exe D:/版權(quán)/快學(xué)Python3/samples/04/生成器.py
Traceback (most recent call last): File "D:/版權(quán)/快學(xué)Python3/samples/04/生成器.py", line 30, in <module>
print(next(f), end=' ')
StopIteration 0 1 1 2 3 5 8 13 21 34 55 注:上述輸出有異常拋出,,是正常的。 實踐提升題大家可以嘗試利用生成器函數(shù)去讀大文件,,例如10G的文件,,你可以利用生成器函數(shù),每次只讀100M進行處理,,處理完后再讀取下一個100M,,如此迭代下去。 分享軟件測試開源技術(shù),、經(jīng)驗,、方案的首發(fā)平臺
|