Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Pengenalan Generator pada Python

by
Difficulty:IntermediateLength:ShortLanguages:

Indonesian (Bahasa Indonesia) translation by Aditia Dwiperdana (you can also view the original English article)

Generator memudahkan kita membuat iterasi dalam Python dan menghasilkan kode lebih sedikit. Tutorial ini akan mengenalkan kamu pada Python Generator, keuntungannya, dan bagaimana mereka bekerja.

Dasar

Sebuah generator adalah fungsi yang mengembalikan objek generator yang bisa kita panggil method next(), sedemikian rupa sehingga setiap pemanggilan mengembalikan nilai berikutnya. Fungsi normal pada Python menggunakan keyword return untuk mengembalikan suatu nilai, tapi generator menggunakan keyword yield untuk mengembalikan nilai. Ini berarti setiap fungsi Python yang berisi yield adalah fungsi generator.

Statement yield biasanya menghentikan fungsi dan menyimpan state lokal agar bisa dilanjutkan tepat seperti saat dihentikan. Fungsi generator bisa memiliki satu atau lebih statement yield.

Sebuah generator juga merupakan sebuah iterator, tapi apa itu iterator? Sebelum kita membahas detail generator, saya rasa penting untuk mengetahui apa itu iterator karena merupakakn bagian penting dari diskusi ini.

Iterator Python

Sebuah iterator Python adalah kelas yang mendefinisikan sebuah fungsi __iter__(). Sebagian besar objek Python bersifat iterable, artinya kamu bisa melakukan loop terhadap setiap elemen dalam objek tersebut. Contoh iterable pada Python misalnya string, list, tuple, dictionary, dan range.

Kita lihat contoh di bawah, kita melakukan loop terhadap daftar warna:

Di balik layar, statement for akan memanggil iter() pada objek list. Lalu fungsi akan mengembalikan objek iterator yang memiliki fungsi __next__(), yang akan mengakses masing-masing warna, satu per satu. Saat tidak ada warna tersisa, __next__ akan melempar exception stopIteration, yang akan menginformasikan loop for untuk berhenti.

Mengiterasi sebuah Dictionary

Mengiterasi Baris dalam file CSV

Mengiterasi String

Keuntungan Menggunakan Generator

Mari kita bahas beberapa keuntungan menggunakan generator dibanding iterator:

Mudah untuk diimplementasi

Membuat iterator pada Python memerlukan kamu untuk mengimplementasi kelas dengan fungsi __iter__() dan __next__() dan menangani semua error stopIteration yang mungkin muncul.

Seperti yang kamu lihat di atas, implementasinya sangat panjang. Semua beban ini secara otomatis ditangani oleh generator.

Penggunaan Memory Lebih Sedikit

Generator membantu meminimalkan penggunaan memory, terutama saat berurusan dengan set data yang besar, karena generator hanya akan mengembalikan objek satu per satu.

Performa dan Optimasi yang Lebih Baik

Generator pada dasarnya pemalas. Ini artinya mereka hanya menghasilkan nilai saat dibutuhkan saja. Tidak seperti iterator biasa, di mana semua nilai dihasilkan tidak peduli apakah mereka akan digunakan atau tidak, generator hanya menghasilkan nilai yang dibutuhkan. Inilah yang mendorong program untuk bekerja lebih cepat.

Bagaimana membuat Generator pada Python

Membuat generator sangat mudah. Yang perlu kamu lakukan hanyalah menulis fungsi biasa, tapi dengan statement yield, bukan return, seperti pada contoh di bawah.

Statement return menghentikan fungsi sepenuhnya, sedangkan yield hanya menghentikan fungsi sampai dipanggil kembali oleh fungsi next().

Contohnya, program di bawah menggunakan statement yield dan next().

Bagaimana Generator Python Bekerja

Kita lihat bagaimana generator bekerja. Lihat contoh di bawah.

Pada fungsi di atas, kita mendefinisikan generator bernama myGenerator, yang menerima argumen l berupa list. Lalu kita definisikan variabel total dan mengatur nilainya menjadi nol. Selain itu, kita melakukan loop ke setiap elemen pada list dan menambahkannya ke variabel total.

Lalu kita buat instance newGenerator dan panggil fungsi next(). Ini akan menjalankan kode sampai berhenti pada nilai pertama dari total, yang saat ini bernilai 0. Fungsi akan menyimpan nilai variabel total sampai berikutnya fungsi dipanggil. Tidak seperti statement return biasa, yang akan mengembalikan semua nilai sekaligus, generator akan melanjutkan dari yang terakhir diproses.

Di bawah ini adalah nilai-nilai berikutnya.

Jika kamu coba panggil fungsi setelah loop selesai, kamu akan mendapatkan error StopIteration.

StopIteration dilempar oleh fungsi next() untuk menandai bahwa tidak ada objek yang dihasilkan oleh iterator.

Contoh 2

Pada contoh ini, kita akan lihat bagaimana cara menggunakan beberapa statement yield dalam sebuah fungsi.

Fungsi normal mengambalikan semua nilai saat fungsi tersebut dipanggil, sedangkan generator menunggu sampai fungsi next() dipanggil kembali. Begitu next() dipanggil, fungsi warna melanjutkan dari titik terakhir fungsi tersebut berhenti.

Kesimpulan

Generator sangat efisien dalam menggunakank memory, terutama saat berkerja dengan daftar atau objek yang sangat besar. Ini karena kamu bisa menggunakan yield untuk mengerjakan bagian lebih kecil dibanding menyimpan semua data dalam memory sekaligus.

Jangan lupa untuk melihat apa yang dijual dan bisa dipelajari pada Envato Market, dan jangan sungkan bertanya dan memberi kamu masukan dengan fitur komentar di bawah.

Selain itu, jika kamu merasa kesulitan, ada kursus tentang Python generator pada bagian course.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.