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.

Coba Solusi ini di Editor

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.

generators_demo.py
Coba di Editor
# 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 elements
Keluaran Terminal
Memory 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

Sumber Daya Python yang Direkomendasikan

Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.