天天看點

《Python資料科學指南》——1.9 生成一個疊代器和生成器

本節書摘來自異步社群《python資料科學指南》一書中的第1章,第1.9節,作者[印度] gopi subramanian ,方延風 劉丹 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

上一節,我們了解了什麼是疊代器,這一節我們來讨論如何生成一個疊代器。

生成器提供了清晰的文法,能夠依次通路一個序列,并不需要使用__iter__和next()這兩個函數。我們也不用寫一個類了。請注意,生成器和可疊代這兩者才能制造一個疊代器。

如果你了解了前面小節裡的推導,我們下面的示例你也能明白,在這個示例中,我們有一個生成器推導。回憶一下,我們曾經用下面的方式來進行一個元組推導,并得到了一個生成器對象。

很明顯,上面的代碼片段将算出給定範圍的數的平方和,本例中的範圍是從1到9(python的range函數是右側結束),使用生成器,我們建立了一個名為simplecounter的疊代器,我們用它在for循環中循序通路那些潛在的資料。請注意我們現在沒有使用iter()函數,代碼十厘清晰,我們成功地用一種優雅的方式重建了我們的舊simplecounter類。

讓我們看看如何使用yield語句來建立一個生成器。

在上面的代碼中,my_gen()函數就是一個生成器,我們使用yield語句來傳回一個序列輸出。

在前面的小節中,我們提到過生成器和可疊代兩者才能制造一個疊代器,下面我們通過使用iter函數調用生成器來驗證一下。

在我們進入下一節“使用可疊代對象”之前,強調一下使用生成器的注意事項,當我們完成對序列的通路時,就該立刻結束,不要再試圖擷取更多的資料。

使用生成器對象時,我們隻能通路序列一次。