Python3 生成器與yield

2021-08-18 06:31:32 字數 1456 閱讀 9033

#斐波那契數列指的是這樣乙個數列:1、1、2、3、5、8、13、21、34、…

importtime

# def fib(times):

# a = 0

# b = 1

# n = 1

# while n<=times:

# print(b)

# a,b = b,a+b

# n+=1

# fib(7)

#生成器寫法

deffib(times):

a = 0

b = 1

n = 1

whilen<=times:

# print(b)

yieldb #儲存資訊狀態

time.sleep(1)

a,b = b,a+b

n+=1

return'done'

#沒什麼作用,但是當丟擲stopiteration異常的時候會返回return內容

f=fib(7)#生成器,呼叫一次返回乙個值;而不是像普通函式那樣去呼叫def fib()函式

# for i in f:

# print(i)

'''yield的作用就把乙個函式變成乙個生成器,帶有yield的函式不再是乙個普通

函式,python直譯器會將其視為乙個generator,呼叫fib(7)不會執行fib函式

而是返回乙個迭代器物件!在for迴圈執行時,每次迴圈都會執行fib函式內部的**,

執行到yield b時,fib函式就返回乙個值。下次再呼叫的時候,其它**接著由中斷

位置接著執行

'''# 獲取生成器函式返回值,用捕獲stopiteration異常,for。。in。。永遠不會出現異常,所以用while true

while true:

try:

print(next(f))

exceptstopiteration

ase:

print(e.value)

break#所以需要返回值的時候可以如此操作

#總結:

'''生成器它能夠記住上一次返回時函式體中的位置。對生成器函式的第二次(或第n次)

呼叫跳轉至函式中間yield處,而上次呼叫的所有的區域性變數都保持不變。

生成器不僅「記住」資料狀態,還記住它在流控制構造中的位置。

生成器的特點:

1、節約記憶體。

2、儲存(上一次)狀態。

'''

python3生成器 Python3 生成器

python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...

十 python3 生成器

生成器 generator 在 python 中,不必建立完整的 list,從而節省大量的空間。一邊迴圈一邊計算的機制。建立乙個 generator,有很多種方法。第一種方法很簡單,只要把乙個列表生成式的 改成 就建立了乙個 generator l x x for x in range 10 l 0...

python 3 生成器 and 迭代器

迭代器官方文件 大多是的檔案物件可以用for迴圈語句,例如 for element in 1,2,3 print element for element in 1,2,3 print element for key in print key for char in 123 print char fo...