yield from dan Delegasi
Gabungkan generator
yield from dan Delegasi adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Masalah yang Diatasi yield from
Saat satu generator ingin menghasilkan setiap nilai dari iterable lain, Anda dapat menulis perulangan manual. yield from melakukan hal yang sama dalam satu baris.
def manual():
for x in [1, 2, 3]:
yield x
print(list(manual()))Memperkenalkan yield from
yield from iterable mendelegasikan tugas kepada iterable tersebut dan menghasilkan setiap nilainya secara berurutan. Cara ini lebih singkat dan lebih jelas daripada perulangan penerusan.
def delegate():
yield from [1, 2, 3]
print(list(delegate()))Menggabungkan Beberapa Sumber
Anda dapat merangkai beberapa pernyataan yield from untuk menggabungkan urutan secara tertunda.
def chained():
yield from 'ab'
yield from [1, 2]
yield from range(2)
print(list(chained()))Mendelegasikan kepada Generator Lain
Iterable yang didelegasikan dapat berupa generator, sehingga Anda dapat menyusun beberapa generator menjadi generator yang lebih besar.
def evens(n):
for i in range(n):
if i % 2 == 0:
yield i
def report(n):
print('evens:')
yield from evens(n)
print(list(report(6)))Meratakan Daftar Bersarang
Salah satu penggunaan klasik yield from adalah perataan rekursif: generator yang mendelegasikan tugas kepada dirinya sendiri untuk memproses subdaftar.
def flatten(items):
for item in items:
if isinstance(item, list):
yield from flatten(item)
else:
yield item
print(list(flatten([1, [2, [3, 4]], 5])))yield from vs Perulangan
Kedua versi di bawah menghasilkan keluaran yang sama. yield from lebih disukai karena keterbacaannya dan karena juga meneruskan fitur lanjutan, seperti pengiriman nilai dan hasil yang dikembalikan.
def with_loop(src):
for x in src:
yield x
def with_yield_from(src):
yield from src
print(list(with_loop(range(3))))
print(list(with_yield_from(range(3))))Menangkap Nilai Return Generator Bagian
Saat generator yang didelegasikan mengembalikan nilai dengan return, yield from menghasilkan nilai tersebut. Dengan demikian, generator bagian dapat melaporkan suatu hasil.
def counter(n):
count = 0
for i in range(n):
yield i
count += 1
return count
def driver():
total = yield from counter(3)
print('subgen yielded', total, 'items')
list(driver())Membangun Pipeline
Pendelegasian memudahkan pemisahan pipeline menjadi tahap-tahap bernama dan penyusunannya.
def source():
yield from range(5)
def only_odd(src):
for x in src:
if x % 2 == 1:
yield x
def pipeline():
yield from only_odd(source())
print(list(pipeline()))Mendelegasikan kepada Iterable Apa Pun
yield from dapat digunakan dengan iterable apa pun, bukan hanya generator: daftar, tuple, set, string, kunci kamus, dan lainnya.
def mixed():
yield from {1, 2, 3}
yield from ('a', 'b')
result = list(mixed())
print(sorted(str(x) for x in result))Menggabungkan Generator secara Berurutan
Anda dapat membangun generator yang menelusuri beberapa sumber secara berurutan, yang berguna untuk menggabungkan aliran.
def concat(*iterables):
for it in iterables:
yield from it
print(list(concat([1, 2], [3], [4, 5])))Keterbacaan Lebih Diutamakan
Untuk data yang sangat bersarang atau berbentuk pohon, yield from membuat generator rekursif tetap singkat dan memperjelas maksudnya.
def walk(tree):
yield tree['name']
for child in tree.get('children', []):
yield from walk(child)
tree = {'name': 'root', 'children': [
{'name': 'a'},
{'name': 'b', 'children': [{'name': 'c'}]}
]}
print(list(walk(tree)))Pemeriksaan Singkat
Uji pemahaman Anda tentang yield from.
Ringkasan
Anda telah mempelajari yield from dan pendelegasian:
- Fitur ini meneruskan setiap nilai dari iterable bagian dalam.
- Fitur ini menyusun generator dan mendukung perataan rekursif.
- Fitur ini menangkap nilai yang dikembalikan generator bagian.
- Fitur ini lebih jelas daripada perulangan penerusan manual.
Kursus berikutnya: konkurensi dengan threading dan multiprocessing.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “yield from dan Delegasi” gratis?
Ya — teks lengkap “yield from dan Delegasi” 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 “yield from dan Delegasi”?
Gabungkan generator 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 4 dari 4.
Berapa lama pelajaran “yield from dan Delegasi” 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