Ungkapan Penjana
Tulis pipeline malas yang padat
Ungkapan Penjana ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 3 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.
Daripada Pemahaman Senarai kepada Ungkapan Penjana
Ungkapan penjana kelihatan seperti pemahaman senarai, tetapi menggunakan tanda kurung dan bukannya tanda kurung siku. Ungkapan ini menghasilkan nilai secara malas dan bukannya membina senarai penuh.
list_comp = [x * x for x in range(5)]
gen_expr = (x * x for x in range(5))
print(list_comp)
print(gen_expr)
print(list(gen_expr))Perbezaan Penggunaan Memori
Pemahaman senarai memperuntukkan setiap elemen terlebih dahulu. Ungkapan penjana hampir tidak menyimpan apa-apa sehingga Anda meminta nilai. Bandingkan saiz kedua-duanya.
import sys
lst = [x for x in range(10000)]
gen = (x for x in range(10000))
print('list bytes:', sys.getsizeof(lst))
print('gen bytes:', sys.getsizeof(gen))Melakukan Lelaran pada Ungkapan Penjana
Anda menggunakan ungkapan penjana seperti mana-mana objek lelar: dengan gelung for, next(), atau dengan menghantarnya kepada fungsi.
gen = (c.upper() for c in 'hello')
for ch in gen:
print(ch)Menapis dengan if
Tambahkan klausa if untuk mengekalkan hanya item yang sepadan, sama seperti dalam pemahaman.
evens = (n for n in range(10) if n % 2 == 0)
print(list(evens))Menghantar Terus kepada Fungsi
Apabila ungkapan penjana ialah satu-satunya argumen kepada fungsi, Anda boleh membuang tanda kurung tambahan. Cara ini kemas dan mengelakkan pembinaan senarai sementara.
total = sum(x * x for x in range(5))
print(total)
biggest = max(len(w) for w in ['a', 'abc', 'ab'])
print(biggest)Peringatan: Digunakan Sekali Sahaja
Ungkapan penjana habis digunakan selepas satu laluan, sama seperti fungsi penjana. Lelaran kedua tidak menghasilkan apa-apa.
gen = (x for x in range(3))
print(list(gen))
print(list(gen))Merantai Ungkapan
Anda boleh menyalurkan satu ungkapan penjana ke dalam ungkapan yang lain untuk membina alur pemprosesan malas. Tiada apa-apa dikira sehingga pengguna akhir mendapatkan nilai.
nums = (n for n in range(10))
evens = (n for n in nums if n % 2 == 0)
doubled = (n * 2 for n in evens)
print(list(doubled))any() dan all()
Ungkapan penjana sangat berguna dengan any() dan all() kerana kedua-duanya boleh berhenti lebih awal sebaik sahaja jawapan diketahui.
words = ['cat', 'dog', 'elephant']
print(any(len(w) > 5 for w in words))
print(all(len(w) >= 3 for w in words))Gelung Bersarang
Seperti pemahaman, ungkapan penjana menyokong beberapa klausa for yang dibaca dari kiri ke kanan.
pairs = ((x, y) for x in range(2) for y in range(2))
print(list(pairs))Contoh Alur Pemprosesan Malas
Berikut ialah alur pemprosesan teks yang ringkas. Setiap peringkat bersifat malas, jadi fail yang sangat besar boleh distrim tanpa memuatkan keseluruhannya.
lines = [' alpha ', '', ' beta', 'gamma ']
stripped = (line.strip() for line in lines)
nonempty = (line for line in stripped if line)
print(list(nonempty))Bila Memilih yang Mana
Gunakan pemahaman senarai apabila Anda perlu menggunakan data beberapa kali atau memerlukan pengindeksan. Gunakan ungkapan penjana untuk penstriman satu laluan atau data yang besar.
data = range(6)
as_list = [x + 1 for x in data]
print(as_list[0], as_list[-1])
total = sum(x + 1 for x in data)
print(total)Semakan Ringkas
Uji pemahaman Anda tentang ungkapan penjana.
Imbas Kembali
Anda telah mempelajari ungkapan penjana:
- Gunakan tanda kurung sebagai alternatif malas kepada pemahaman senarai.
- Ungkapan ini menjimatkan memori serta menyokong penapis
ifdan gelung bersarang. - Ungkapan ini sesuai digabungkan dengan
sum,any,all, dan perantaian. - Ungkapan ini digunakan sekali sahaja.
Seterusnya: menggabungkan penjana dengan yield from.
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 “Ungkapan Penjana” percuma?
Ya — teks penuh “Ungkapan Penjana” 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 “Ungkapan Penjana”?
Tulis pipeline malas yang padat 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 3 daripada 4.
Berapa lamakah pelajaran “Ungkapan Penjana” 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