# 生成器 [](https://gezf7g7pd5.execute-api.ap-northeast-1.amazonaws.com/default/source_up_to_date?owner=erg-lang&repos=erg&ref=main&path=doc/EN/syntax/35_generator.md&commit_hash=e959b3e54bfa8cee4929743b0193a129e7525c61) 生成器是在塊中使用 `yield!` 過程的特殊過程 ```python g!() = yield! 1 yield! 2 yield! 3 ``` `yield!` 是在調用`self!.yield!` 的子程序塊中定義的過程。和`return`一樣,它把傳遞給它的值作為返回值返回,但它具有保存block當前執行狀態,再次調用時從頭開始執行的特性 生成器既是過程又是迭代器; Python 生成器是一個創建迭代器的函數,而 Erg 直接迭代。過程本身通常不是可變對象(沒有`!`),但生成器是可變對象,因為它自己的內容可以隨著每次執行而改變 ```python # Generator! g!: Generator!((), Int) assert g!() == 1 assert g!() == 2 assert g!() == 3 ``` Python 風格的生成器可以定義如下 ```python make_g() = () => yield! 1 yield! 2 yield! 3 make_g: () => Generator! ```
上一頁 | Next