目錄
- 定義
- 使用 for 循環來迭代生成器對象
- 斐波那契
定義
- 在 Python 中,使用了 yield 的函數被稱為生成器(generator)。
- Python 中的生成器(Generator)是一種特殊的迭代器,可以通過函數來創建。
- 與常規函數不同的是,生成器使用 yield 語句來產生一個值,并暫停函數的執行,保留當前的狀態,以便下次從暫停的位置繼續執行。
也就是說,生成器其實就是帶yield的函數,而調用該函數時遇到yield的位置,該函數就返回yield返回的值,并且之后該函數會停在那個位置,直到下次調用。
使用 for 循環來迭代生成器對象
定義一個迭代器:
def count_up_to(n):for i in range(n):yield i
使用for循環進行迭代
# 使用生成器進行迭代
for num in count_up_to(5):print(num)
使用next迭代:
# 創建生成器對象
generator = count_up_to(6)
# 輸出
print(next(generator))
print(next(generator))
斐波那契
利用yield每次返回后會保留函數內參數的特點,可以很好的解決遞歸問題:
def fibonacci(n):a, b, cnt = 0, 1, 0while True:if cnt > n:returnyield aa, b = b, a + bcnt += 1n = 5
f = fibonacci(n)
fib_lst = [next(f) for _ in range(5)]
print(fib_lst)
對比不使用yield的實現方法,普通方法(比如迭代方法)會一次性計算和存儲所有的值,可能會占用更多的內存。
生成器的主要優勢是節省內存,因為它們按需生成值,而不是一次性生成所有值。這使得它們非常適合處理大量數據或無限序列的情況。