yield from dan Delegasi
Gabungkan penjana
yield from dan Delegasi ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Masalah yang Diselesaikan oleh yield from
Apabila satu penjana mahu menghasilkan setiap nilai daripada objek boleh lelar yang lain, Anda boleh menulis gelung manual. yield from melakukan perkara yang sama dalam satu baris.
def manual():
for x in [1, 2, 3]:
yield x
print(list(manual()))Memperkenalkan yield from
yield from iterable menyerahkan tugas kepada objek boleh lelar tersebut dan menghasilkan setiap nilainya mengikut turutan. Cara ini lebih ringkas dan jelas berbanding gelung penerusan.
def delegate():
yield from [1, 2, 3]
print(list(delegate()))Menggabungkan Pelbagai Sumber
Anda boleh merantai beberapa pernyataan yield from untuk menggabungkan jujukan secara malas.
def chained():
yield from 'ab'
yield from [1, 2]
yield from range(2)
print(list(chained()))Menyerahkan Tugas kepada Penjana Lain
Objek boleh lelar yang menerima tugas tersebut juga boleh berupa penjana, lalu membolehkan Anda menggabungkan penjana menjadi penjana 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 Senarai Bersarang
Salah satu kegunaan klasik yield from ialah perataan rekursif: penjana yang menyerahkan tugas kepada dirinya sendiri untuk memproses subsenarai.
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 berbanding Gelung
Kedua-dua versi di bawah menghasilkan output yang sama. yield from lebih disukai kerana mudah dibaca dan turut meneruskan ciri lanjutan seperti penghantaran nilai serta hasil pulangan.
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))))Mendapatkan Nilai Pulangan Subpenjana
Apabila penjana yang menerima tugas melakukan return dengan suatu nilai, yield from dinilai sebagai nilai tersebut. Ini membolehkan subpenjana melaporkan 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())Membina Alur Pemprosesan
Penyerahan tugas memudahkan pembahagian alur pemprosesan kepada peringkat bernama dan penggabungannya.
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()))Menyerahkan Tugas kepada Sebarang Objek Boleh Lelар
yield from berfungsi dengan sebarang objek boleh lelar, bukan penjana sahaja: senarai, tupel, set, rentetan, kunci kamus dan banyak lagi.
def mixed():
yield from {1, 2, 3}
yield from ('a', 'b')
result = list(mixed())
print(sorted(str(x) for x in result))Menggabungkan Penjana Mengikut Turutan
Anda boleh membina penjana yang melawati beberapa sumber secara berturutan, yang berguna untuk menggabungkan aliran.
def concat(*iterables):
for it in iterables:
yield from it
print(list(concat([1, 2], [3], [4, 5])))Kelebihan Kebolehbacaan
Untuk data yang sangat bersarang atau berbentuk pepohon, yield from memastikan penjana rekursif kekal ringkas dan menjelaskan 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)))Semakan Ringkas
Uji pemahaman Anda tentang yield from.
Imbas Kembali
Anda telah mempelajari yield from dan penyerahan tugas:
- Ia meneruskan setiap nilai daripada objek boleh lelar dalaman.
- Ia menggabungkan penjana dan menyokong perataan rekursif.
- Ia mendapatkan nilai pulangan subpenjana.
- Ia lebih jelas berbanding gelung penerusan manual.
Kursus seterusnya: keserentakan dengan utas dan pemprosesan berbilang proses.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 76
- Pelajaran
- 320
Soalan Lazim
Adakah pelajaran “yield from dan Delegasi” percuma?
Ya — teks penuh “yield from dan Delegasi” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “yield from dan Delegasi”?
Gabungkan penjana Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Python Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “yield from dan Delegasi” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Protokol Lelaran
- Fungsi Penjana
- Ungkapan Penjana
- yield from dan Delegasi