久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

一分鐘了解Python生成器

什么是生成器

當我們討論生成器的時間一般會涉及兩個方面

生成器函數 :生成器函數類似正常的函數,但是當它需要返回值的時候使用 yield 來代替 return。如果一個函數包含 yield,那么就可以說這個函數是生成器函數。

def gen_fun():

??yield 'a'

??yield 'b'

for item in gen_fun():

??print(item)

執行以上代碼,輸出:

a

b

生成器對象 :生成器函數返回的就是生成器對象,通過調用生成器對象的 next() 方法(Python3 為 __next__() 或內置的 next 函數)或 for in 語法來使用生成器對象。

def gen_func():

??yield 'a'

??yield 'b'

# 這里的 g 就是一個生成器對象

g = gen_func()

# 通過 for in 來去除生成的數據

for item in g:

??print(item)

執行以上代碼,輸出:

a

b

生成器有什么特點

同樣是可以用 for in 來遍歷對比直接返回 ['a', 'b'] 的正常函數,它具有以下特殊之處:

它并沒有把所有生成的值存在內存中,而是在運行時生成值。

它返回的生成器對象僅可遍歷一次,例如上述例子中再次使用 for item in g 遍歷時會發現什么沒輸出。

生成器的應用場景

生成器運行時生成值時的特性可以避免一次性創建大量的對象占有過多的內存,它能夠讓你在許多情況下以一種優雅而又更低內存消耗的方式簡化 無限 序列相關的操作。實際場景中當需要大量生成數據的時候都是考慮讓生成器登場的時候。

以下是一個經典的實現斐波那契數列生成器的例子:

def fib(n):

??a, b = 0, 1

??for item in range(n):

????yield b

????a, b = b, a + b

for item in fib(5):

??print(item)

執行以上代碼,輸出:

1

1

2

3

5

 

聲明:文章來源于網絡,如有侵權請聯系刪除!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 固原市| 巧家县| 资溪县| 嵊州市| 兰考县| 三台县| 巴林左旗| 全南县| 临颍县| 新建县| 原阳县| 封开县| 白玉县| 台中县| 措勤县| 成都市| 襄樊市| 乌鲁木齐市| 黄平县| 孟津县| 阿拉尔市| 吉安县| 锦屏县| 根河市| 平潭县| 汉阴县| 黔南| 曲麻莱县| 来安县| 乌拉特中旗| 江达县| 化州市| 蕲春县| 杭州市| 石柱| 德昌县| 乳源| 军事| 西和县| 登封市| 高青县|