Cara Menggunakan Generator dengan Python (pernyataan hasil)
Pelajari cara menulis generator dengan Python. Pahami kata kunci hasil, evaluasi malas, pengoptimalan memori, dan bandingkan generator dengan struktur daftar.
Ikhtisar
Saat bekerja dengan kumpulan data besar, file log, atau aliran data tak terbatas, memuat semua elemen ke dalam memori secara bersamaan (seperti mengembalikan daftar besar) dapat dengan mudah menghabiskan RAM sistem dan membuat aplikasi Anda crash. Python menawarkan solusi brilian dan hemat memori: Generator.
Generator adalah tipe fungsi khusus yang mengembalikan iterator malas. Daripada menghitung semua nilai sekaligus dan mengembalikannya, generator menghasilkan nilai satu per satu seperti yang diminta. Perbedaan utamanya adalah pernyataan `hasil`. Saat fungsi generator memanggil `yield`, ia akan menghentikan status eksekusinya (variabel, penunjuk instruksi) dan mengembalikan nilai yang dihasilkan. Ketika nilai berikutnya diminta, fungsi akan dilanjutkan tepat di tempat ia dijeda.
Karena penghitungan generator dijalankan dengan lambat, penghitungan tersebut hampir tidak menggunakan memori apa pun ukuran kumpulan datanya. Python juga mendukung ekspresi generator, yang menggunakan sintaksis tanda kurung `(x untuk x dalam data)` untuk membuat generator inline ringan tanpa mendeklarasikan fungsi penuh.
Kode & Output Eksekusi
Skrip ini mendemonstrasikan pembuatan urutan menggunakan fungsi generator dengan pernyataan hasil dan ekspresi generator.
# 1. Generator function using yield
def count_up_to(limit):
count = 1
while count <= limit:
yield count
count += 1
# Instantiating the generator
counter = count_up_to(3)
print("Memory safe generator instantiated.")
# Fetching values manually
print("Next 1:", next(counter))
print("Next 2:", next(counter))
print("Next 3:", next(counter))
# 2. Iterating with a for loop (automatically handles StopIteration)
print("\n--- Looping over generator ---")
for num in count_up_to(4):
print("Num:", num)
# 3. Generator expression (Shorthand syntax)
squares_gen = (x**2 for x in range(1, 4))
print("\nGenerator expression elements:")
print(list(squares_gen)) # Cast to list to print all elementsMemory safe generator instantiated.
Next 1: 1
Next 2: 2
Next 3: 3
--- Looping over generator ---
Num: 1
Num: 2
Num: 3
Num: 4
Generator expression elements:
[1, 4, 9]Implementasi Langkah demi Langkah
- Definisikan fungsi menggunakan kata kunci def standar.
- Gunakan kata kunci hasil alih-alih kembali ke nilai hasil kembali ke aliran iterator.
- Ulangi generator menggunakan loop for atau panggil fungsi next(gen) bawaan untuk mengekstrak nilai.
- Gunakan ekspresi generator (menggunakan tanda kurung) untuk konversi lambat sebaris yang sederhana.
Pertanyaan yang Sering Diajukan
Apa keuntungan utama generator dibandingkan daftar?
Efisiensi memori. Daftar menyimpan semua elemen dalam RAM secara bersamaan, sementara generator menghasilkan item satu per satu sesuai permintaan, memungkinkan Anda memproses kumpulan data yang lebih besar dari total memori sistem Anda.
Apa yang terjadi jika generator kehabisan item?
Python memunculkan pengecualian StopIteration. Perulangan for menangkap pengecualian ini secara otomatis untuk keluar dari perulangan dengan baik, tetapi memanggil next() pada generator yang sudah habis secara manual akan memunculkan pengecualian.
Topik Terkait
Pelajari cara menggunakan pemahaman daftar dengan Python. Tulis loop ringkas, terapkan filter bersyarat, dan buat matriks dengan sintaksis visual yang bersih.
Cara Menggunakan Manajer Konteks dengan PythonPelajari cara kerja pengelola konteks dengan Python. Kuasai pernyataan with, kelola sumber daya sistem, dan tulis pengelola konteks khusus.
Sumber Daya Python yang Direkomendasikan
Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.
Generator Python
Pelajari cara menggunakan generator Python dan pernyataan hasil untuk memproses kumpulan data besar dengan jejak memori minimal. Ekspresi generator utama.
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.