我一直在研究Ruby和Python生成器(在Ruby中稱爲Enumerators
)之間的相似之處/差異,並且據我所知,它們幾乎相當。Ruby生成器與Python生成器
但是我注意到的一個區別是Python生成器支持close()
方法,而Ruby生成器不支持。從Python文檔中,close()
方法據說執行以下操作:
在生成器函數暫停的位置引發一個GeneratorExit。如果發電機的功能,然後引發StopIteration異常(由正常退出,或因已被關閉)或GeneratorExit(由未捕獲異常),接近返回到它的調用者。」
有一個很好的理由紅寶石Enumerators
不支持close()
方法呢?還是一個偶然 遺漏?
我還發現,紅寶石Enumerators
支持rewind()
方法尚未Python生成不...是有這個嗎?
理由謝謝
好奇,但我不明白你會怎麼用這個:你能舉個例子嗎? – 2010-09-25 20:31:54
@Andrew Vit:這可以用來使發生器保存的資源 - 數據庫連接,文件等被清理。它還會阻止從代碼的其他部分進一步調用其「下一個」或「發送」方法。例如,您可以調用'close'來指示其中一個消費者向其他人表明已找到期望的值。 – intuited 2010-09-25 20:38:22
@intuited,是Python的'close()'實際上常用嗎?我想我在某個地方看到它被python社區認爲是「奧術」,並沒有真正被利用。 – horseyguy 2010-09-26 12:39:53