Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah fungsi \'hantar\' berfungsi dengan penjana Python, dan apakah aplikasi praktikalnya?
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>
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>
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>
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!