Pelajari bagaimana tipe fungsi alternatif ini dapat membantu Anda mengurangi jejak memori.

Jika Anda membaca baris dari file log atau memproses daftar item yang panjang, salah satu pilihannya adalah memuat seluruh data ke dalam memori. Namun, pendekatan ini dapat menggunakan banyak memori dan menghambat kinerja. Generator menawarkan solusi yang berharga.

Generator menghilangkan kebutuhan untuk memuat semua data ke dalam memori secara bersamaan. Mereka berguna saat menangani kumpulan data besar, urutan tak terbatas, atau skenario apa pun yang mengutamakan efisiensi memori.

Apa Itu Generator?

Generator adalah fungsi khusus yang memungkinkan Anda melakukan iterasi pada serangkaian nilai. Alih-alih mengembalikan sekumpulan data lengkap, mereka menghasilkan—atau menghasilkan—satu nilai dalam satu waktu. Hal ini membuatnya efisien untuk bekerja dengan rangkaian data yang besar atau tidak terbatas.

A fungsi Python biasa biasanya menghitung nilai dan mengembalikannya. Tapi generator beroperasi secara berbeda. Mereka dapat menghasilkan banyak nilai dari waktu ke waktu dengan menjeda dan melanjutkan eksekusi di antara setiap hasil.

instagram viewer

Perbedaan utama antara fungsi biasa dan generator adalah alih-alih menggunakan kembali kata kunci untuk menghasilkan hasil, generator menggunakan menghasilkan.

Cara Membuat Generator

Untuk membuat generator, alih-alih kembali pernyataan, gunakan a menghasilkan pernyataan dalam fungsi. Itu menghasilkan kata kunci tidak hanya menginstruksikan fungsi untuk mengembalikan nilai tetapi juga membiarkannya menyimpan statusnya, sehingga memungkinkan untuk dilanjutkan kembali di masa mendatang.

Berikut adalah contoh fungsi generator sederhana:

defnumeric_generator():
yield1
yield2
yield3

gen = numeric_generator()

Fungsi generator ini menghasilkan nilai numerik dari 1 hingga 3.

Itu menghasilkan pernyataan menyimpan status fungsi, mempertahankan variabel lokal di antara panggilan, untuk dilanjutkan saat Anda meminta nilai berikutnya.

Menetapkan fungsi generator ke variabel akan membuat objek generator yang dapat Anda gunakan.

Bekerja Dengan Generator

Generator memiliki banyak aplikasi. Anda bisa menggunakannya dalam for loop atau dalam pemahaman daftar, serta struktur berulang lainnya. Generator juga bisa berfungsi sebagai argumen untuk suatu fungsi.

Setelah Anda membuat generator, Anda dapat mengulanginya menggunakan perulangan for:

for i in numeric_generator():
print(i)

Anda juga dapat menggunakan Berikutnya berfungsi untuk mengambil nilai satu per satu:

print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3

Ini memberi Anda kontrol lebih besar atas objek generator.

Generator dapat melacak statusnya. Setiap pernyataan hasil dalam suatu fungsi bertindak seperti pos pemeriksaan. Saat Anda menelepon Berikutnya() fungsi pada objek generator, eksekusi diambil dari titik hasil sebelumnya.

Anda juga dapat meneruskan nilai ke generator menggunakan mengirim():

defgenerator_with_send():
# First yield: Receive a value
x = yield
print(f"Received: {x}")

# Second yield: Receive another value
y = yield
print(f"Received: {y}")

# Third yield: Yield the sum
yield x + y

gen = generator_with_send()

# Start generator and reach first yield
next(gen)

# Send 10 into generator, received at first yield
result = gen.send(10)

# Send 5 into generator, received at second yield
result = gen.send(5)

# Print result of third yield
print(result)

Itu mengirim() Metode ini memungkinkan Anda mengambil nilai dari generator dan mengirim nilai kembali ke fungsi generator, menjedanya secara efektif, dan memungkinkan Anda mengontrol eksekusinya. Itu mengirim() Metode ini berguna saat menulis coroutine atau menggunakan generator untuk tujuan tingkat lanjut.

Menggunakan Ekspresi Generator

Ekspresi generator memberikan cara ringkas untuk membuat generator sederhana dan anonim. Mereka mirip dengan pemahaman daftar tetapi menggunakan tanda kurung dan bukan tanda kurung.

Berikut ini contohnya:

gen = (i**2for i in range(10))

for x in gen:
print(x)

Kode tersebut membuat ekspresi generator yang menghasilkan kuadrat angka 0 hingga 9. Ekspresi generator ideal untuk menghasilkan urutan nilai dengan malas.

Menggunakan Generator untuk Pemrosesan Data

Generator Python adalah cara mudah untuk mendeskripsikan aliran data dan membangun iterator tanpa menyimpan semuanya di memori. Anda dapat meningkatkan pemrograman Anda secara signifikan dengan belajar menggunakan generator, sehingga lebih mudah menangani tugas pemrosesan data yang menantang.

Saat berikutnya Anda bekerja dengan kumpulan data besar, ingatlah generator dan delegasikan tugas-tugas padat karya kepada mereka, sehingga kode Anda tetap responsif dan efisien.