Menghadapi objek penjana yang telah menghasilkan berbilang nilai, anda mungkin berusaha untuk memperbaharuinya untuk digunakan semula. Usaha ini berpunca daripada keinginan untuk mengelakkan penyediaan yang memakan masa yang berkaitan dengan penciptaan penjana.
Malangnya, tidak seperti ouroboros, penjana tidak boleh menjana semula dirinya. Walau bagaimanapun, beberapa strategi menawarkan penangguhan:
Seperti burung phoenix, anda boleh menghidupkan semula penjana dengan menggunakan fungsi induknya semula:
<code class="python">y = FunctionWithYield() for x in y: print(x) y = FunctionWithYield() for x in y: print(x)</code>
Pendekatan ini memastikan pengiraan baru tetapi datang pada harga mengulangi langkah penyediaan yang mahal.
Merangkul pemeliharaan, anda boleh menyimpan hasil penjana dalam struktur data yang membenarkan berbilang lelaran :
<code class="python">y = list(FunctionWithYield()) for x in y: print(x) # Can iterate again: for x in y: print(x)</code>
Walaupun kaedah ini melindungi daripada pengiraan berulang, ia menanggung overhed storan.
Pilihan antara pilihan ini menunjukkan pertukaran klasik antara memori dan pemprosesan. Pilihan 1 mengorbankan masa pemprosesan manakala Pilihan 2 membebankan ingatan.
Walaupun tee, seperti yang dicadangkan oleh orang lain, menyediakan fungsi yang menyerupai penimbalan memori, ia masih menanggung overhed storan dan ciri prestasi yang sama sebagai Pilihan 2.
Atas ialah kandungan terperinci Bolehkah Anda Meremajakan Objek Penjana Python untuk Digunakan Semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!