Rumah >hujung hadapan web >tutorial js >Bagaimanakah saya menggunakan kata kunci hasil untuk mengawal aliran pelaksanaan dalam fungsi penjana?
yield
untuk mengawal aliran pelaksanaan dalam fungsi penjana? Kata kunci yield
digunakan dalam fungsi untuk mengubahnya menjadi penjana. Daripada mengembalikan nilai tunggal dan menamatkan, fungsi penjana menjeda pelaksanaannya pada setiap pernyataan yield
, mengembalikan nilai kepada pemanggil. Keadaan fungsi dipelihara, membolehkannya meneruskan pelaksanaan dari mana ia ditinggalkan pada waktu berikutnya ia dipanggil. Ini membolehkan penjanaan urutan nilai atas permintaan, dan bukannya menghasilkan keseluruhan urutan sekaligus.
Mari kita gambarkan dengan contoh:
<code class="python">def my_generator(n): for i in range(n): yield i*2 gen = my_generator(5) # Create a generator object for num in gen: print(num) # Output: 0, 2, 4, 6, 8</code>
Dalam contoh ini, my_generator
tidak mengembalikan senarai. Sebaliknya, setiap panggilan ke next(gen)
(secara tersirat dilakukan dalam for
untuk) melaksanakan fungsi sehingga pernyataan yield
seterusnya ditemui. Nilai yang dihasilkan dikembalikan, dan keadaan fungsi disimpan. Panggilan seterusnya ke next(gen)
menyambung semula dari titik selepas yield
terakhir. Penjana berakhir apabila fungsi melengkapkan pelaksanaannya tanpa menghadapi yield
lain.
yield
daripada mengembalikan senarai? Menggunakan penjana dengan yield
menawarkan beberapa kelebihan untuk mengembalikan senarai:
Singkatnya, penjana adalah ideal apabila anda perlu menghasilkan urutan nilai secara berulang, tanpa overhead memori menyimpan keseluruhan urutan sekaligus.
yield
bersama dengan penyataan aliran kawalan lain seperti if
dan for
gelung dalam fungsi penjana? Ya, anda boleh menggunakan yield
secara bebas dengan pernyataan aliran kawalan lain seperti if
, elif
, else
, for
, dan while
gelung di dalam fungsi penjana. Ini membolehkan mewujudkan urutan kompleks dan bersyarat.
Berikut adalah contoh yang menggabungkan if
dan for
gelung:
<code class="python">def even_numbers_generator(n): for i in range(n): if i % 2 == 0: yield i even_gen = even_numbers_generator(10) for num in even_gen: print(num) # Output: 0, 2, 4, 6, 8</code>
Penjana ini menggunakan for
untuk berulang dan keadaan if
untuk menapis nombor walaupun, hanya menghasilkan nombor bahkan dalam julat yang ditentukan.
yield
berbeza dari kata kunci return
dalam konteks fungsi penjana?Perbezaan utama terletak pada bagaimana ia mempengaruhi pelaksanaan fungsi:
yield
: Menjeda pelaksanaan fungsi, mengembalikan nilai, dan mengekalkan keadaan fungsi. Fungsi ini boleh disambung semula dari mana ia berhenti.return
: Menamatkan pelaksanaan fungsi sepenuhnya. Keadaan fungsi hilang, dan tidak ada nilai selanjutnya yang dapat dihasilkan. Kenyataan return
dalam fungsi penjana menandakan akhir urutan. Pada dasarnya, yield
mencipta iterator, sedangkan return
memberikan hasil akhir dan menamatkan prosesnya. Menggunakan return
dalam fungsi penjana biasanya dilakukan untuk menandakan hujung urutan, walaupun ia juga mungkin untuk return
nilai selain menghasilkan nilai (walaupun ini kurang biasa). Menggunakan return
tanpa menghasilkan sebarang nilai hanya akan mewujudkan fungsi biasa, bukan penjana.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan kata kunci hasil untuk mengawal aliran pelaksanaan dalam fungsi penjana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!