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

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

return 叠代 以及 兩個 for send tro 記錄 UNC

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)

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