1. 程式人生 > >12 生成器和生成器函式以及各種推導式

12 生成器和生成器函式以及各種推導式

今日主要內容
1. 生成器
本質就是迭代器.
一個一個的建立物件
建立生成器的方式:
1. 生成器函式
2. 通過生成器表示式來獲取生成器
3. 型別轉換(看不到)
2. 生成器函式 (重點)
生成器函式中包含 yield , 返回資料和return差不多.
return會立即結束這個函式的執行
yield 可以分段的執行一個函式

生成器函式在執行的時候返回生成器. 而不是直接執行此函式

能向下執行的兩個條件:

__next__(), 執行到下一個yield
send(), 執行到下一個yield, 給上一個yield位置傳值

所有的生成器都是迭代器都可以直接使用for迴圈
都可以使用list()函式來獲取到生成器內所有的資料

生成器中記錄的是程式碼而不是函式的執行
def func():
print("我的天哪 ")

yield "寶寶"

gen = func() # 建立生成器. 此時執行會把生成器函式中的程式碼記錄在記憶體
當執行到__next__(), 執行此空間中的程式碼, 執行到yield結束.


優點: 節省記憶體, 生成器本身就是程式碼. 幾乎不佔用記憶體
特點: 惰性機制, 只能向前. 不能反覆

3. 各種推導式 (詭異)
列表推導式 [結果 for迴圈 if]
字典推導式 {結果(k:v) for迴圈 if}
集合推導式 {結果(k) for迴圈 if}



4. 生成器表示式 (重點)
(結果 for迴圈 if)

1.生成器函式
2.推導式