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:
yieldmenjeda 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
- Protokol Iterator
- Fungsi Generator
- Ekspresi Generator
- yield from dan Delegasi