Memahami Penjana dalam Python
Penjana ialah konsep yang berkuasa dalam Python, membenarkan pembangun mencipta iterator yang menjana nilai secara malas. Ini berbeza daripada fungsi tradisional yang mengembalikan nilai tunggal serta-merta atau mencipta dan mengembalikan senarai. Tidak seperti Java, di mana threading adalah cara utama untuk mencipta pengeluar dan pengguna, penjana Python menyediakan cara alternatif untuk melaksanakan corak ini.
Apakah itu Penjana?
A fungsi penjana dikenal pasti dengan menggunakan kata kunci hasil dan bukannya pulangan. Apabila dipanggil, fungsi penjana mengembalikan objek lelaran, bukan nilai. Peulang ini boleh digunakan untuk mendapatkan nilai satu demi satu, seperti yang diperlukan.
Pertimbangkan contoh berikut:
def my_generator(n): yield n yield n + 1
Apabila fungsi ini dipanggil dengan argumen n, ia mengembalikan lelaran yang boleh menjana nilai n dan n 1. Dengan berulang kali memanggil fungsi next() pada iterator, anda boleh mendapatkan semula nilai satu dengan satu:
my_iter = my_generator(6) print(next(my_iter)) # 6 print(next(my_iter)) # 7
Ungkapan Penjana dan Pemahaman Senarai
Selain fungsi penjana, Python menyokong ungkapan penjana, yang menyediakan sintaks ringkas untuk mentakrifkan penjana. Ia menyerupai pemahaman senarai tetapi menggunakan kurungan dan bukannya kurungan segi empat sama:
my_generator = (n for n in range(3, 5))
Sama seperti pemahaman senarai, ungkapan penjana adalah malas dan hanya menjana nilai seperti yang diperlukan.
Mengapa Gunakan Penjana?
Penjana menawarkan beberapa faedah:
Ciri Tambahan
Penjana menyokong penghantaran semula data ke penjana menggunakan hasil daripada sintaks. Ini membolehkan untuk mencipta saluran paip yang lebih kompleks di mana satu penjana memberi suapan kepada yang lain.
Python juga menyediakan modul itertools, yang menawarkan fungsi lanjutan untuk mencipta dan memanipulasi penjana. Meneroka fungsi ini boleh meningkatkan keupayaan anda untuk bekerja dengan penjana.
Atas ialah kandungan terperinci Bagaimanakah Penjana Python Menyediakan Alternatif Cekap Memori kepada Fungsi Tradisional untuk Mencipta Iterator?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!