日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python生成器的用法,使用生成器灵活的生成斐波那契数列

發布時間:2025/3/20 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python生成器的用法,使用生成器灵活的生成斐波那契数列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

生成器,一定情況下可以節省很多空間

比如:

>>> b = (x for x in range(10))>>> b<generator object <genexpr> at 0x02A17120> 這就是一個生成器,

占的內存空間要比列表小得多

需要取值的話,可以用next()函數,或者__ next__()方法,比如取上面的b的值:

>>> next(b)0>>> b.__next__()1>>> next(b)2>>> b.__next__()3>>>……

Ps:當然也可以使用for遍歷b的值

生成器的另外一種寫法和應用:

斐波那契數列是說后面一個數始終是前面兩個數的和,比如:1,1,2,3,5,8,13,21……,可以使用下面的方式來創建這樣的一組數:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def createNum():print("start----------------")a,b = 0,1for i in range(1000):#只要函數里面有yield這個關鍵字,就表示這個函數是一個生成器yield b a,b = b,a+bprint("stop--------")

a = createNum()

走第一次next(a),上面這個函數的執行步驟:

1、 執行print(“start----------------”)

2、 a = 0, b = 1

3、 第一次循環,走到yield b,打印一個b出來,當前是1,遇到yield,程序會停止往下運行

4、 走第二次next(a),程序繼續執行,從剛才停止的位置yield b的下面開始,也就是執行:a,b = b,a+b,此時b=0+1=1,然后進行第二次for循環,又一次執行到yield b,打印b的值為1,又一次停止運行。

5、 再次走next(a),重復上面的步驟,打印2出來

6、 直到for循環完畢

這個生成器的作用就是說你可以事先定義一個可以生成很多斐波那契數列的數值的一個函數,這個函數占用空間很小,到需要用的時候,再用next函數去生成,需要多少個就next多少次

另外,還有一種情況,可以完成兩個函數交叉調用:

def test1(): #定義一個帶有yield None的生成器while True:print(----111------)yield Nonedef test2(): #定義另外一個帶有yield None的生成器while True:print(----222------)yield Nonea = test1() #創建兩個生成器對象b = test2()def test(): #定義一個函數,調用生成器對象while True:a.__next__()b.__next__()#調用test test()

結果:

----111----------222----------111----------222----------111----------222----------111----------222------……

總結

以上是生活随笔為你收集整理的Python生成器的用法,使用生成器灵活的生成斐波那契数列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。