久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

[快學(xué)Python3]迭代器和生成器

 開源優(yōu)測 2021-12-09

迭代器

迭代是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,,如此迭代下去。

開源優(yōu)測

分享軟件測試開源技術(shù),、經(jīng)驗,、方案的首發(fā)平臺

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多