Penjana dalam Python adalah sejenisnya, sama seperti senarai atau tupel, tetapi mereka tidak menyimpan kandungannya dalam ingatan. Sebaliknya, mereka menjana nilai-nilai on-the-fly menggunakan pernyataan yield
. Mekanisme penilaian malas ini membolehkan penjana menjadi efisien memori kerana mereka tidak mengambil memori untuk menyimpan keseluruhan urutan nilai sekaligus.
Untuk memahami bagaimana penjana meningkatkan kecekapan ingatan, pertimbangkan contoh di mana anda perlu menghasilkan urutan besar nombor, katakan nombor pertama Fibonacci. Jika anda menggunakan senarai, anda perlu menyimpan semua juta nombor dalam ingatan. Walau bagaimanapun, penjana boleh menghasilkan nombor ini satu demi satu, hanya memegang nilai semasa dan sebelumnya dalam ingatan pada bila -bila masa. Ini dengan ketara mengurangkan penggunaan memori, terutamanya untuk dataset besar atau urutan tak terhingga.
Penjana boleh digunakan untuk membuat iterator dengan menentukan fungsi yang menggunakan kata kunci yield
. Apabila fungsi ini dipanggil, ia mengembalikan objek penjana, yang merupakan iterator. Inilah contoh mudah untuk menggambarkan:
<code class="python">def count_up_to(n): i = 0 while i </code>
Dalam contoh ini, count_up_to
adalah fungsi penjana. Apabila dipanggil dengan count_up_to(10)
, ia mengembalikan objek penjana yang boleh diulang dengan menggunakan for
atau kaedah lelaran lain seperti next()
. Kenyataan yield
di dalam fungsi menjeda pelaksanaan fungsi dan mengembalikan nilai semasa i
, menyambung semula dari mana ia berhenti apabila nilai seterusnya diminta.
Perbezaan utama antara penjana dan fungsi biasa di Python adalah:
Model Pelaksanaan :
return
.yield
untuk menghasilkan satu siri nilai satu demi satu, menjeda dan menyambung semula pelaksanaan mereka sebagai nilai yang diminta.Penggunaan Memori :
Pengurusan Negeri :
yield
.Penggunaan :
Penjana amat bermanfaat dalam beberapa senario praktikal:
Dengan memanfaatkan penjana dalam senario ini, pemaju boleh menulis kod yang lebih cekap dan berskala, terutamanya apabila berurusan dengan jumlah data yang besar atau persekitaran yang terkawal.
Atas ialah kandungan terperinci Apakah penjana di Python? Bagaimanakah mereka meningkatkan kecekapan ingatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!