Generator Python: Iterator Hemat Memori
Pelajari cara menggunakan generator Python dan pernyataan hasil untuk memproses kumpulan data besar dengan jejak memori minimal. Ekspresi generator utama.
Ikhtisar
Saat menulis kode yang memproses ribuan atau jutaan catatan, manajemen memori menjadi sangat penting. Jika Anda memuat seluruh kumpulan data ke dalam daftar, Anda berisiko kehabisan RAM dan membuat server mogok. Generator Python mengatasi masalah ini dengan menyediakan mekanisme untuk mengalirkan data sesuai permintaan. Alih-alih menghitung dan menyimpan seluruh kumpulan data dalam memori sekaligus, generator menghasilkan satu item pada satu waktu, menyerahkannya ke pemanggil, dan menghentikan sementara eksekusi hingga item berikutnya diminta.
Generator didefinisikan seperti fungsi normal, tetapi menggunakan kata kunci `yield`, bukan `return`. Ketika fungsi generator dipanggil, ia mengembalikan objek iterator generator tanpa menjalankan pernyataan internal fungsi tersebut. Saat pemanggil memanggil `next()` pada generator (atau mengulanginya), fungsi tersebut dijalankan hingga mencapai `yield`. Pada saat itu, generator menghasilkan nilai, menyimpan variabel lokalnya, dan menunda eksekusi. Ketika dipanggil lagi, ia melanjutkan persis di tempat terakhirnya.
Anda juga dapat membuat generator menggunakan ekspresi generator, yang menggunakan sintaksis yang identik dengan pemahaman daftar tetapi dibungkus dengan tanda kurung `(...)` dan bukan tanda kurung `[...]`. Hal ini membuatnya sangat mudah untuk mengganti pemahaman daftar dengan iterator yang hemat memori. Dengan menghindari alokasi memori yang besar, generator sangat diperlukan untuk bekerja dengan log besar, mengalirkan data dari database, atau melakukan perhitungan pada urutan matematika dengan panjang tak terbatas.
Kode & Output Eksekusi
Generator khusus yang menghasilkan angka Fibonacci dan ekspresi generator hemat memori.
def fibonacci_generator(limit):
"""Yields Fibonacci numbers up to the limit."""
a, b = 0, 1
count = 0
while count < limit:
yield a
a, b = b, a + b
count += 1
# Instantiate generator
fib = fibonacci_generator(5)
print("--- Using Generator Function ---")
for num in fib:
print(num)
# Generator expression (squares of numbers)
squares_gen = (x**2 for x in range(1, 1000000))
print("\n--- Using Generator Expression ---")
print(next(squares_gen))
print(next(squares_gen))
print(next(squares_gen))--- Using Generator Function ---
0
1
1
2
3
--- Using Generator Expression ---
1
4
9Implementasi Langkah demi Langkah
- Membaca file baris demi baris yang terlalu besar untuk RAM
- Menghasilkan rangkaian ID atau angka matematika yang tak terbatas
- Streaming catatan database dalam batch untuk memproses panggilan API
Pertanyaan yang Sering Diajukan
Apa perbedaan antara hasil dan pengembalian?
return mengakhiri fungsi sepenuhnya. hasil menghasilkan nilai dan menjeda fungsi, menyimpan statusnya sehingga dapat dilanjutkan saat diminta.
Apa yang terjadi jika generator kehabisan item?
Ini memunculkan pengecualian StopIteration. Di bawah perulangan 'for', Python secara otomatis mencegat pengecualian ini untuk mengakhiri perulangan dengan bersih.
Topik Terkait
Pelajari cara menggunakan loop Python untuk melakukan iterasi pada data. Kuasai perulangan for, perulangan while, hancurkan, lanjutkan, dan ulangi praktik terbaik dengan contoh interaktif.
Pemahaman PythonTulis Python yang lebih bersih dan lebih cepat. Daftar master, kamus, dan pemahaman kumpulan dengan contoh praktis, kondisi pemfilteran, dan loop bersarang.
Python ItertoolsPelajari modul itertools Python. Kuasai iterator tak terbatas, kombinasi, permutasi, pengelompokan, dan pemrosesan data hemat memori.
Sumber Daya Python yang Direkomendasikan
Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.
Cara Menggunakan Generator dengan Python
Pelajari cara menulis generator dengan Python. Pahami kata kunci hasil, evaluasi malas, pengoptimalan memori, dan bandingkan generator dengan struktur daftar.
Lembar
Panduan referensi lengkap untuk manipulasi string Python. Kuasai pemformatan, pencarian, pemisahan, penggantian, dan pemeriksaan properti string.
Python vs JavaScript: Bahasa Pemrograman Mana yang Terbaik?
Perbandingan komprehensif antara Python dan JavaScript. Jelajahi perbedaan sintaksis, kinerja, kasus penggunaan (backend vs frontend), dan contoh pengkodean.