← Kembali ke kursus
Pelajaran kursus · Python
Pelajaran 40

Generator dan yield

Fungsi yang menghasilkan nilai satu per satu, hemat memori.

Pahami konsepnya

Generator adalah fungsi yang memakai yield alih-alih return: setiap yield menghasilkan SATU nilai lalu menjeda eksekusi — state lokal (variabel, posisi) tetap terjaga. Saat elemen berikutnya diminta, eksekusi melanjutkan dari titik jeda itu. return mengakhiri generator.

Keunggulannya: LAZY. range(1_000_000) tidak menyimpan sejuta angka — ia menghasilkan satu per satu saat diminta. Generator expression (x**2 for x in range(10)) adalah comprehension tanpa kurung siku, menghasilkan iterator bukan list.

Use case: membaca berkas besar baris per baris tanpa memuat semuanya, pipeline transformasi data, dan infinite sequence (yield nilai berikutnya selamanya tanpa habis memori).

Coba contoh kode

def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b

for fib in fibonacci(8):
    print(fib, end=" ")  # 0 1 1 2 3 5 8 13
print()

# generator expression
kuadrat = (x**2 for x in range(5))
print(list(kuadrat))
print(sum(x**2 for x in range(10)))  # tanpa list perantara

yield a memberi nilai lalu MENJEDA — variabel a dan b tetap hidup antar pemanggilan. Generator expression di dalam sum() tidak membangun list perantara: angka dihitung dan dijumlahkan satu per satu.

Latihan singkat

Uji: list(fib(6)) harus `[0, 1, 1, 2, 3, 5]`.