0Pricing
Python Academy · Pelajaran

Fungsi Generator

Hasilkan nilai secara malas dengan yield

Fungsi Generator adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Apa Itu Generator?

Fungsi generator terlihat seperti fungsi biasa, tetapi menggunakan yield sebagai pengganti (atau bersama) return. Memanggilnya tidak menjalankan isi fungsi; pemanggilan tersebut mengembalikan objek generator, yang merupakan iterator.

def gen():
    yield 1
    yield 2
    yield 3

g = gen()
print(type(g).__name__)
print(list(g))

yield Menjeda Eksekusi

Setiap kali Anda memanggil next(), fungsi berjalan hingga menemukan yield, mengembalikan nilai tersebut, lalu membekukan keadaannya. Pemanggilan berikutnya melanjutkan eksekusi tepat setelah yield.

def steps():
    print('start')
    yield 'a'
    print('resumed')
    yield 'b'

g = steps()
print(next(g))
print(next(g))

Melakukan Perulangan pada Generator

Karena generator merupakan iterator, perulangan for menggerakkannya secara otomatis dan berhenti saat fungsi berakhir (yang secara internal memunculkan StopIteration).

def countdown(n):
    while n > 0:
        yield n
        n -= 1

for x in countdown(4):
    print(x)

Evaluasi Tertunda

Generator bersifat tertunda: nilai hanya dihasilkan saat diminta. Dengan demikian, Anda dapat memodelkan urutan yang sangat besar atau tak terbatas tanpa menggunakan banyak memori.

def naturals():
    n = 1
    while True:
        yield n
        n += 1

g = naturals()
print(next(g), next(g), next(g))

Keadaan di antara yield

Variabel lokal mempertahankan nilainya di antara titik-titik yield. Generator secara alami mengingat posisi terakhirnya, tanpa pencatatan indeks secara manual.

def fib():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

g = fib()
print([next(g) for _ in range(7)])

Generator vs Membuat Daftar

Fungsi biasa membuat dan mengembalikan seluruh daftar sekaligus. Generator menghasilkan item sesuai permintaan. Gunakan generator jika urutannya besar atau Anda mungkin berhenti lebih awal.

def squares_list(n):
    result = []
    for i in range(n):
        result.append(i * i)
    return result

def squares_gen(n):
    for i in range(n):
        yield i * i

print(squares_list(5))
print(list(squares_gen(5)))

Berhenti Lebih Awal

Karena produksinya tertunda, Anda dapat keluar dari perulangan dan generator tidak akan pernah menghitung bagian sisanya.

def naturals():
    n = 1
    while True:
        print('producing', n)
        yield n
        n += 1

for x in naturals():
    if x > 3:
        break
    print('got', x)

return di Dalam Generator

return tanpa nilai di dalam generator hanya mengakhirinya (dengan memunculkan StopIteration). Nilai apa pun yang Anda kembalikan menjadi atribut value pada pengecualian tersebut, yang biasanya diabaikan oleh sebagian besar perulangan.

def up_to(stop):
    i = 0
    while True:
        if i >= stop:
            return
        yield i
        i += 1

print(list(up_to(4)))

Generator Hanya Dapat Digunakan Sekali

Seperti semua iterator, generator dikonsumsi satu kali. Setelah habis, generator tidak menghasilkan apa pun. Panggil fungsi tersebut lagi untuk mendapatkan generator baru.

def gen():
    yield 1
    yield 2

g = gen()
print(list(g))
print(list(g))
print(list(gen()))

Memfilter dengan Generator

Generator membantu membuat pipeline data yang bersih. Di sini, kita hanya menghasilkan bilangan genap, satu per satu.

def evens(numbers):
    for n in numbers:
        if n % 2 == 0:
            yield n

print(list(evens(range(10))))

Merangkai Generator

Sebuah generator dapat mengonsumsi generator lain untuk membangun pipeline bertahap yang setiap tahapnya tertunda.

def numbers(n):
    for i in range(n):
        yield i

def doubled(src):
    for x in src:
        yield x * 2

print(list(doubled(numbers(5))))

Pemeriksaan Singkat

Uji pemahaman Anda tentang fungsi generator.

Ringkasan

Anda telah mempelajari fungsi generator:

  • yield menjeda dan melanjutkan eksekusi sambil mempertahankan keadaan lokal.
  • Memanggil fungsi tersebut mengembalikan objek generator yang tertunda.
  • Generator hemat memori dan cocok untuk pipeline serta aliran tak terbatas.
  • Generator hanya dapat digunakan sekali, seperti iterator apa pun.

Selanjutnya: ekspresi generator yang lebih ringkas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fungsi Generator” gratis?

Ya — teks lengkap “Fungsi Generator” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Fungsi Generator”?

Hasilkan nilai secara malas dengan yield Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Fungsi Generator” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Protokol Iterator
  2. Fungsi Generator
  3. Ekspresi Generator
  4. yield from dan Delegasi
← Kembali ke Python Academy