Bagaimanakah fungsi \'hantar\' berfungsi dengan penjana Python, dan apakah aplikasi praktikalnya?

DDD
Lepaskan: 2024-11-01 13:16:02
asal
261 orang telah melayarinya

How does the

Menggunakan Penjana Python dengan Fungsi "hantar"

Penjana dalam Python menyediakan cara untuk mengulangi urutan nilai dengan malas tanpa perlu menyimpan keseluruhan urutan dalam ingatan. Kata kunci hasil digunakan untuk menjana nilai dan menjeda pelaksanaan fungsi penjana. Walau bagaimanapun, terdapat kaedah lain, dipanggil hantar, yang memainkan peranan penting dalam menggunakan penjana.

Tujuan Fungsi "hantar"

Fungsi send() dihidupkan Penjana Python membolehkan anda menyambung semula pelaksanaan fungsi penjana dan "menghantar" nilai ke dalamnya. Nilai ini menjadi hasil daripada ungkapan hasil semasa. Tidak seperti hasil, yang mengembalikan nilai seterusnya yang dihasilkan oleh penjana, send() mengembalikan nilai yang dihantar ke penjana.

Memahami Fungsi "hantar"

Untuk menjelaskannya, bayangkan fungsi penjana yang menjana urutan nombor berganda. Menggunakan hasil, anda boleh mendapatkan nombor dua kali ganda seterusnya:

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

Sekarang, katakan anda ingin menghantar nilai 10 ke dalam penjana ini. Menggunakan send(), anda boleh melakukan ini:

<code class="python">generator = double_generator()
next(generator)  # Initiate the generator
result = generator.send(10)  # Send 10 into the generator
print(result)  # Output: 20</code>
Salin selepas log masuk

Dalam contoh ini, panggilan send() menyambung semula fungsi penjana dari titik di mana ia menghasilkan (x = hasil), memberikan nilai yang dihantar (10 ) kepada pembolehubah x, dan mengembalikan hasil pernyataan hasil seterusnya (hasil x * 2), iaitu 20.

Contoh "hantar" dalam Amalan

Menggunakan send() tidak terhad kepada penjana penggandaan mudah. Ia amat berguna apabila anda ingin menghantar nilai ke dalam fungsi penjana dan mengawal pelaksanaannya secara dinamik. Sebagai contoh, pertimbangkan kod berikut yang bergantung pada send():

<code class="python">@defer.inlineCallbacks
def do_something():
    result1 = yield long_running_process(10)
    result2 = yield long_running_process(result1 * 2)
    defer.returnValue(result2 / 10)</code>
Salin selepas log masuk

Kod ini menggunakan penghias @defer.inlineCallbacks Twisted, yang membenarkan menulis kod tak segerak seolah-olah ia segerak. Di sini, long_running_process() ialah fungsi yang mengambil sedikit masa untuk disiapkan dan mengembalikan Tertunda.

Apabila do_something() dilaksanakan, ia menghantar nilai ke dalam fungsi penjana. Sebagai contoh, selepas hasil awal, pelaksanaan berhenti seketika sehingga Deferred dikembalikan oleh long_running_process(10) diselesaikan. Hasil Tertunda kemudiannya dihantar semula ke penjana, di mana ia ditetapkan kepada keputusan berubah1.

Aliran dinamik ini membolehkan kod tak segerak yang lebih kompleks ditulis dengan cara yang lebih mudah, menjadikannya lebih mudah untuk berfungsi dengan proses tak segerak dalam Python.

Atas ialah kandungan terperinci Bagaimanakah fungsi \'hantar\' berfungsi dengan penjana Python, dan apakah aplikasi praktikalnya?. 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
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!