Apakah tujuan sebenar fungsi \'hantar\' dalam penjana Python, dan bagaimanakah ia berbeza daripada kata kunci \'hasil\'?

Linda Hamilton
Lepaskan: 2024-11-02 11:46:30
asal
497 orang telah melayarinya

What is the true purpose of the

Melindungi Cahaya untuk Tujuan Fungsi "hantar" Penjana

Dalam bidang penjana Python, kata kunci hasil berdiri sebagai asas, membolehkan penciptaan urutan boleh lelaran. Walau bagaimanapun, di samping hasil, satu lagi fungsi misteri tersembunyi dalam bayang-bayang: hantar.

Dokumentasi menyediakan penerangan samar, menyatakan bahawa penghantaran "meneruskan pelaksanaan dan "menghantar" nilai ke dalam fungsi penjana." Ini menimbulkan persoalan tentang tujuan dan hubungannya dengan hasil.

Nilai ialah Input dan Output?

Kekeliruan pertama timbul daripada tanggapan bahawa nilai berfungsi sebagai input kepada fungsi penjana. Walau bagaimanapun, dokumentasi juga mencadangkan bahawa penghantaran mengembalikan nilai seterusnya yang dihasilkan oleh penjana. Bukankah ini fungsi yang sama dilakukan oleh hasil?

Menyingkap Tujuan Sebenar

Kunci untuk menyelesaikan enigma ini terletak pada pemahaman bahawa penghantaran membolehkan suntikan nilai sementara penjana menghasilkan. Pertimbangkan contoh berikut:

<code class="python">def double_inputs():
    while True:
        x = yield
        yield x * 2</code>
Salin selepas log masuk

Bayangkan penjana ini sebagai kotak hitam dengan dua lubang: satu untuk menerima nilai (hasil) dan satu untuk mengembalikannya (hasil). Jika anda memanggil seterusnya(penjana) untuk memulakan penjana, ia akan berhenti seketika pada penyata hasil pertama, menunggu input.

Kini, anda boleh menggunakan hantar untuk menyuapkan nilai ke dalam penjana. Nilai disimpan sementara dalam pembolehubah x. Setelah menyambung semula penjana, kod di luar penyataan hasil pertama dilaksanakan, menggandakan nilai input dengan berkesan dan mengembalikannya melalui hasil.

Contoh Tidak Berbaloi

Untuk menunjukkan keupayaan unik penghantaran yang tidak boleh dicapai dengan hasil, pertimbangkan perkara berikut:

<code class="python">gen = double_inputs()
next(gen)       # run up to the first yield
gen.send(10)    # goes into 'x' variable</code>
Salin selepas log masuk

Kod ini secara berkesan menyuntik nilai 10 ke dalam penjana. Ia kemudian menyambung semula pelaksanaan dan mengembalikan 20, nilai dua kali ganda. Urutan tindakan ini adalah mustahil untuk dicapai semata-mata dengan hasil.

Twisted's Magic dengan hantar

Satu aplikasi praktikal hantaran ditunjukkan oleh penghias @defer.inlineCallbacks Twisted. Ia membolehkan anda menulis fungsi yang menghasilkan objek Tertunda, yang mewakili nilai masa hadapan. Rangka kerja asas memintas objek Tertunda ini, melaksanakan pengiraan yang diperlukan di latar belakang.

Apabila pengiraan selesai, rangka kerja menghantar semula hasilnya kepada penjana, mensimulasikan penyambungan semula pelaksanaan dan membenarkan penjana meneruskan dengan yang berikutnya operasi.

Kesimpulan

Fungsi hantar pada penjana Python memberi anda kuasa untuk menyuntik nilai ke dalam penjana yang dijeda pada penyataan hasil. Keupayaan ini membolehkan aliran kawalan yang canggih dan boleh memudahkan pengaturcaraan tak segerak, seperti yang ditunjukkan oleh penghias @defer.inlineCallbacks Twisted. Dengan memahami tujuan unik penghantaran bersama hasil, anda boleh mengeluarkan potensi penuh penjana dalam kod Python anda.

Atas ialah kandungan terperinci Apakah tujuan sebenar fungsi \'hantar\' dalam penjana Python, dan bagaimanakah ia berbeza daripada kata kunci \'hasil\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!