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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

pythonyield详解_Python yield生成器详解

發布時間:2024/10/14 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pythonyield详解_Python yield生成器详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用了 yield 語句的函數稱為生成器(generator)。與普通函數不同的是,生成器是一個返回迭代器的函數,只能用于迭代操作,因此生成器實際上是一種特殊的迭代器。調用一個生成器函數,返回的是一個迭代器對象。

使用 yield 語句相當于為函數封裝好 __iter__() 和 __next__() 方法。在調用生成器運行的過程中,每次遇到 yield 語句時函數會暫停并保存函數執行的狀態,返回 yield 語句中表達式的值,并在下一次執行 next( ) 方法時從當前位置繼續運行。

yield 可以理解為“return”,返回其后表達式的值給調用者。不同的是 return 返回后,函數會釋放,而生成器則不會。在直接調用 next 方法或用 for 語句進行下一次迭代時,生成器會從 yield 下一句開始執行,直至遇到下一個 yield。

以下代碼使用帶 yield 語句的生成器得到斐波那契數列:

import sys

def Fibonacci(n):

a, b, counter = 0, 1, 0

while True:

if(counter > n):

return

yield a

a, b = b, a + b

counter += 1

f = Fibonacci(15)

while True:

try:

print(next(f), end=" ")

except StopIteration:

sys.exit()

上述代碼的運行結果如下所示:

>>> import sys

>>> def Fibonacci(n):

... a, b, counter = 0, 1, 0

... while True:

... if(counter > n):

... return

... yield a

... a, b = b, a + b

... counter += 1

>>> while True:

... try:

... print(next(f), end=" ")

... except StopIteration:

... sys.exit()

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610

不帶 yield 語句的生成器可以用來定義生成器表達式,將列表轉換為元組。使用生成器表達式取代列表推導式可以同時節省 CPU 和內存資源。例如:

L = [1, 2, 3, 4, 5]

T = tuple(i for i in L)

print(T)

上述代碼的運行結果如下所示:

>>> L = [1, 2, 3, 4, 5]

>>> T = tuple(i for i in L)

>>> print(T)

(1, 2, 3, 4, 5)

一些 Python 內置函數可以識別這是生成器表達式,直接代入運算,例如:

print(sum(i for i in range(100)))

上述代碼的運行結果如下所示:

>>> print(sum(i for i in range(100)))

4950

注意,根據左開右閉原則,上述代碼中的 range(100) 得到的列表是從 0 到 99,不包括 100。

總結

以上是生活随笔為你收集整理的pythonyield详解_Python yield生成器详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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