Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Penjana
Memajukan Generator Secara Manual
Objektif
Gunakan generator dalam urutan manual untuk mengumpulkan dan menghasilkan bahan-bahan bagi membuat roti.
Di hadapan terdapat sebuah fasiliti di mana anda boleh mengumpulkan adunan roti menggunakan mesin press. Biasanya anda akan menggunakan fungsi combine() untuk menggabungkan bahan-bahan tetapi ini tidak berlaku di sini, bahan-bahan tersebut perlu disaring dahulu sebelum boleh digabungkan.
Untuk tugas ini kita boleh menggunakan generator kerana ia boleh diubahsuai untuk menghasilkan jenis fail yang berbeza serta urutannya boleh dipanggil mengikut arahan dan bukan secara automatik seperti yang dilakukan oleh fungsi dan gelung. Berikut adalah contohnya:
def bread():
yield 5
yield "grain"
Kod di atas mempunyai sebuah generator dengan dua pernyataan yield, salah satunya menghasilkan nombor sebenar manakala yang satu lagi menghasilkan rentetan. Kita boleh menghasilkan nilai-nilai dari generator mengikut kehendak dengan menggunakan fungsi next(). Seperti berikut:
recipe = bread() # Menyediakan Generator player.place(next(recipe)) # Nilai pertama dipanggil player.collect(next(recipe)) # Nilai kedua dipanggil
Dalam contoh di atas, generator telah disediakan dan fungsi next() digunakan dengan generator untuk memanggil nilai yield pertama untuk digunakan dalam fungsi place(). Ini diulang dengan nilai kedua tetapi sebaliknya digunakan dalam fungsi collect(). Ini memudahkan pemanggilan nilai yang pelbagai jenis dalam satu urutan tanpa perlu menggunakan beberapa senarai atau pembolehubah.
Sebuah generator bernama bread() akan ditakrifkan dalam editor kod tetapi ia akan memerlukan nombor kuantiti bagi setiap bahan untuk anda menyaring adunan roti. Nombor-nombor ini ditulis pada papan tanda di sebelah fasiliti tersebut. Sediakan generator untuk digunakan dengan merujuknya, seperti berikut: recipe = bread()
Pertama, berjalanlah ke tanda X cahaya di sebelah tangki susu dan collect() baki susu dalam tangki menggunakan fungsi next() pada generator, seperti berikut: player.collect(next(recipe)). Kemudian, berjalanlah ke tanda X emas di sebelah papan tanda dan gunakan fungsi speak() untuk mendapatkan nombor kuantiti yang diperlukan untuk generator menghasilkan roti dan catatkan nombor tersebut dalam generator. Data tersebut disimpan dalam sebuah konstanta yang dinamakan "sign" dan boleh dipanggil seperti berikut: player.speak(sign).
Setelah semua nilai dimasukkan ke dalam generator, masuk ke dalam fasiliti dan gunakan player.place(next(recipe)) pada tanda X gelap dan player.collect(next(recipe)) pada tanda X cahaya bagi melengkapkan tahap tersebut.