Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
## Generator Generator adalah objek khusus di Python yang memungkinkan Anda menghasilkan nilai (value) satu per satu daripada sekaligus, sehingga mereka sangat berguna ketika bekerja dengan urutan data yang besar atau bahkan tak terbatas. ### Membuat Generator Untuk membuat generator, Anda perlu menggunakan fungsi dengan setidaknya satu kata kunci `yield`. ```python # Contoh generator yang menghasilkan hasil pangkat dua dari 0 hingga n-1 def generator_pangkat_dua(n): for i in range(n): yield i ** 2 ``` Alih-alih menggunakan `return`, yang akan mengakhiri eksekusi fungsi, `yield` memisahkan tempat di mana eksekusi ditangguhkan dan dapat dilanjutkan. ### Menggunakan Generator Dengan generator, Anda dapat melintasi nilai yang dihasilkan, seperti dengan objek iterable lainnya. ```python for value in generator_pangkat_dua(5): print(value) ``` Output akan menjadi: ``` 0 1 4 9 16 ``` ### Fitur Utama - **Penangguhan dan Dilanjutkan**: Generator mempertahankan "keadaan" fungsinya di antara pemanggilan. Setiap kali `yield` dipanggil, eksekusi fungsi ditangguhkan dan dapat dilanjutkan dari titik terakhir saat dipanggil lagi. - **Manajemen Memori yang Efisien**: Hanya satu elemen yang disimpan dalam memori pada satu waktu. Hal ini membuat generator cocok untuk menangani koleksi data yang sangat besar atau bahkan tidak terbatas. - **Rata-rata**: Jika tidak menggunakan `yield`, ada juga fungsi built-in Python yang bersifat generator, contohnya `range()` di Python 3, yang tidak langsung menciptakan seluruh daftar dalam memori.
Secara manual memajukan Generator
Tujuan
Menggunakan generator dalam urutan manual untuk menyusun dan memproduksi bahan untuk membuat roti.
Di depan ada fasilitas di mana Anda bisa menggabungkan beberapa adonan roti menggunakan mesin pengepress. Biasanya Anda akan menggunakan fungsi combine() untuk menggabungkan bahan-bahan tetapi tidak untuk kasus ini, bahan-bahan perlu diperhalus terlebih dahulu sebelum bisa digabungkan.
Untuk tugas ini, kita dapat menggunakan generator karena bisa disesuaikan untuk mengeluarkan berbagai jenis file serta urutannya bisa dipanggil sesuai perintah daripada secara otomatis seperti yang dilakukan oleh fungsi dan loop. Berikut adalah contohnya:
def bread():
yield 5
yield "grain"
Kode di atas memiliki generator dengan dua pernyataan yield, salah satunya menghasilkan bilangan riil dan lainnya string. Kita dapat menghasilkan nilai dari generator sesuai permintaan menggunakan fungsi next(). Seperti ini:
recipe = bread() # Menyiapkan Generator player.place(next(recipe)) # Nilai pertama dipanggil player.collect(next(recipe)) # Nilai kedua dipanggil
Dalam contoh di atas, generator disiapkan dan fungsi next() digunakan dengan generator untuk memanggil nilai yield pertama untuk digunakan dalam fungsi place(). Ini diulang dengan nilai kedua tetapi digunakan dalam fungsi collect(). Ini membuatnya mudah untuk memanggil nilai-nilai dari berbagai jenis dalam urutan tanpa harus menggunakan banyak daftar atau variabel.
Sebuah generator bernama bread() akan didefinisikan di dalam editor kode tetapi akan memerlukan angka jumlah untuk setiap bahan agar Anda dapat memperhalus adonan roti. Angka-angka ini ditulis pada tanda di sebelah fasilitas. Siapkan generator untuk digunakan dengan mereferensikannya, seperti ini: recipe = bread()
Pertama berjalanlah ke tanda X terang di sebelah tangki susu dan collect() sisa susu dalam tangki menggunakan fungsi next() generator, seperti ini: player.collect(next(recipe)). Lalu berjalanlah ke tanda X emas di sebelah tanda dan gunakan fungsi speak() untuk mendapatkan angka jumlah yang dibutuhkan untuk generator menghasilkan roti dan tuliskan dalam generator. Data ini disimpan dalam konstanta bernama "sign" dan akan dipanggil seperti ini: player.speak(sign).
Setelah semua nilai dimasukkan ke dalam generator, masuklah ke fasilitas dan gunakan player.place(next(recipe)) pada tanda X gelap dan player.collect(next(recipe)) pada tanda X terang untuk menyelesaikan level.