在Python編程語言中,生成器無疑是最有用的特性之一,但同時,生成器也是Python中使用最少的特性之一。為什么它們如此有用,但沒有被很多人使用呢?原因是生成器的概念在其他編程語言中比較少見,也就是對大多數人來說是一個比較新的東西,所以沒有引起廣大程序員的注意。
什么是生成器?
這個概念比較模糊,每個人都有自己不同的理解,但是大部分主體是一樣的,本質都是迭代器,但是很多時候迭代器和生成器被認為是同一個概念,其實兩者也有.唯一不同的是,迭代器是Python提供給開發者已經編寫好的工具或者是通過數據轉換得到的工具。生成器是一個需要開發者自己用Python代碼構建的工具,這是最大的不同。
Python中創建生成器有三種方式,如何創建呢?
1.通過生成器函數
2.通過生成器推導公式
3.提供Python內置函數或模塊,其實1和3這兩種類型本質上是一樣的。它們都是以函數的形式生成的,只不過1是我自己寫的生成器函數,3是Python提供的生成器函數。
生成器的優點是可以邊循環邊計算,不用單遍就可以生成大集合。生成器可以節省內存空間。
生成器保存的是算法,列表保存計算出的內容,所以對于相同的內容,生成器占用內存小,而列表占用內存大。
在Python中,使用yield的函數可以稱為生成器,生成器是一個返回迭代器的函數,只能用于迭代操作。簡單來說,可以理解為生成器=迭代器。