Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kata Kunci `menghasilkan` Python Mencipta Iterator yang Cekap dalam Fungsi Penjana?

Bagaimanakah Kata Kunci `menghasilkan` Python Mencipta Iterator yang Cekap dalam Fungsi Penjana?

Barbara Streisand
Barbara Streisandasal
2024-12-25 17:44:10247semak imbas

How Does Python's `yield` Keyword Create Efficient Iterators in Generator Functions?

Apakah yang dilakukan oleh kata kunci "hasil" dalam Python?

Kata kunci "hasil" Python digunakan dalam fungsi penjana, yang merupakan fungsi khas yang bertindak sebagai iterator.

Fungsi Penjana dan Iterator

  • Iterators: Objek yang menghasilkan jujukan nilai satu demi satu.
  • Fungsi Penjana: Fungsi yang mengembalikan iterator dan bukannya nilai tertentu. Mereka menggunakan kata kunci "hasil" untuk menjana nilai atas permintaan.

Fungsi "hasil"

Apabila fungsi penjana dipanggil:

  • Fungsi penjana tidak menjalankan kodnya serta-merta.
  • Sebaliknya, ia mengembalikan penjana objek.
  • Objek penjana ini ialah lelaran yang menghasilkan nilai.

Apabila iterator digunakan dalam gelung 'untuk':

  • Yang pertama apabila gelung menemui pernyataan "hasil", fungsi penjana menyambung semula pelaksanaan dan menghasilkan yang pertama nilai.
  • Lelaran gelung seterusnya menyebabkan fungsi penjana disambung semula dan menghasilkan nilai seterusnya sehingga tiada lagi nilai yang tinggal.
  • Fungsi penjana ditamatkan apabila ia mencapai penghujung logiknya atau menemui pernyataan "kembali".

Kod Contoh Penjelasan

Coretan kod yang diberikan mentakrifkan fungsi penjana yang dipanggil _get_child_candidates dalam kelas nod.

  • Fungsi mengambil parameter jarak, min_dist dan max_dist.
  • Ia menghasilkan nod anak kiri dan kanan jika jaraknya memenuhi nod kriteria.
  • Jika tiada lagi kanak-kanak memenuhi kriteria, fungsi penjana ditamatkan.

Dalam kod pemanggil:

  • hasil dimulakan sebagai kosong senarai.
  • calon dimulakan sebagai senarai yang mengandungi objek nod semasa.
  • Gelung lelaran ke atas calon.
  • Bagi setiap nod, ia menyemak jarak dan menambah nilainya untuk terhasil jika ia memenuhi kriteria.
  • Ia kemudian memanjangkan calon dengan nod anak yang diperoleh daripada penjana _get_child_candidates.
  • Gelung berterusan sehingga semua nod anak telah diproses.

Faedah Penjana

  • Kecekapan ingatan: Penjana tidak menyimpan semua nilai dalam ingatan, tidak seperti senarai.
  • Penilaian malas: Nilai dikira hanya apabila penjana diulang, mengurangkan pengiraan overhead.
  • Kawalan lanjutan ke atas lelaran: Anda boleh mengawal penjanaan nilai menggunakan logik dalam fungsi penjana.

Atas ialah kandungan terperinci Bagaimanakah Kata Kunci `menghasilkan` Python Mencipta Iterator yang Cekap dalam Fungsi Penjana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn