久久国产乱子伦精品免费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. 主站蜘蛛池模板: 新余市| 任丘市| 西贡区| 长乐市| 丹凤县| 九龙城区| 磐安县| 汉川市| 临邑县| 重庆市| 湟源县| 岑巩县| 洞口县| 白城市| 会东县| 文水县| 巴彦淖尔市| 汶上县| 江孜县| 遵化市| 进贤县| 新竹市| 库车县| 大姚县| 华阴市| 会泽县| 兰州市| 遵义市| 德保县| 临江市| 南投市| 犍为县| 临沂市| 景谷| 孝昌县| 霍城县| 盐城市| 芦山县| 文山县| 蓬安县| 贺州市|