3
Terima kasih kepada Shaumik Daityari untuk membantu meninjau artikel ini.
Apabila kita memanggil fungsi di Python, fungsi ini biasanya akan mula berfungsi sehingga ia menemui pulangan, pengecualian, atau mencapai akhir - selepas itu ia mengembalikan kawalan kembali kepada pemanggil. Setiap kali anda memanggil fungsi itu lagi, proses akan bermula dari
! Katakanlah bahawa anda meminta seseorang untuk mengesan kereta merah di jalan raya. Orang itu akan terus mendapat soalan yang bertanya kepada mereka jika mereka melihat kereta merah atau tidak, dan orang itu akan menjawab sama ada 'ya' atau 'tidak'. Jika orang itu menjawab 'ya', bilangan kali kereta merah itu akan meningkat akan meningkat.
mari kita lihat bagaimana kita boleh melakukan ini di Python:
Jika anda menjalankan program ini, apa yang anda perhatikan? Adakah anda perasan bahawa bilangan kali untuk jawapan 'ya' sentiasa dihadkan pada 1, dan apabila anda menjawab 'tidak' bilangan kali mendapat 0 tanpa mengira 'ya' sebelum ini?di sinilah kata kunci hasil Python. Hasil adalah cara yang mana kita
sementara
kawalan tangan kepada pemanggil, dan mengharapkan untuk meneruskan dari titik di mana kawalan telah diserahkan.import time def red_cars(answer): n = 0 while True: if answer == 'yes': n = n + 1 return n else: return n stop = time.time() + 5 * 60 while time.time() < stop: answer = raw_input('Did you spot a red car on the road? ("yes" or "no"): ') times = red_cars(answer) print 'You have spotted ' + str(times) + ' cars so far!'
Sebelum memberikan penyelesaian kepada contoh di atas, izinkan saya menunjukkan contoh yang sangat mudah untuk menggambarkan lebih baik bagaimana hasil berfungsi.
Katakan kita mempunyai skrip python mudah berikut:
Jika anda menjalankan skrip, anda akan mendapat output berikut:
Sekarang, jika kita menggunakan hasil sebaliknya, seperti berikut:
def step_by_step(): return 'step 1' return 'step 2' return 'step 3' step = step_by_step() for i in range (3): print step
output akan menjadi seperti berikut:
step 1 step 1 step 1
seperti yang anda lihat, kami dapat mencipta siri
def step_by_step(): yield 'step 1' yield 'step 2' yield 'step 3' step = step_by_step() for i in range (3): print step.next()
Jika kita kembali ke contoh utama kita (kereta merah), ia boleh ditulis seperti berikut untuk melaksanakan tugas yang diperlukan:
step 1 step 2 step 3
Oleh itu, seperti yang dapat kita lihat, hasilnya dianggap penting apabila kita berminat untuk meneruskan pelaksanaan pada titik terakhir di mana fungsi (penjana) keluar, dan di mana kita juga berminat untuk mengekalkan nilai pembolehubah tempatan antara panggilan yang berbeza - Tidak seperti fungsi biasa, di mana nilai -nilai tersebut dimusnahkan apabila keluar dari fungsi.
Terdapat, bagaimanapun, penggunaan hasil lain. Sebagai contoh, anda boleh menggunakan hasil jika anda mempunyai fungsi yang mengembalikan urutan (contohnya, baris dalam lembaran Excel) dan anda perlu melangkah ke atas urutan tanpa setiap nilai dalam memori sekaligus. Iaitu, untuk menyelamatkan ingatan.Hasil juga boleh digunakan semasa bekerja dengan ayat, di mana kita mempunyai senarai besar yang sukar untuk dilalui antara fungsi. Sebagai contoh, fungsi terbina Python untuk permutasi dan kombinasi dalam modul penggunaan modul ITERTools.
Bagaimana kata kunci hasil Bekerja di Python?
cetak (nilai)
Ya, anda boleh menggunakan kata kunci hasil dalam fungsi rekursif dalam python. Walau bagaimanapun, anda perlu ingat untuk berulang atas panggilan rekursif dan menghasilkan setiap nilai, jika tidak, anda akan mendapat objek penjana dan bukannya nilai yang anda harapkan. Dalam python?
Apabila fungsi penjana di Python tidak mempunyai nilai lagi untuk menghasilkan, ia menimbulkan pengecualian stopiteration. Anda boleh menangkap pengecualian ini dengan menggunakan blok percubaan/kecuali. Berikut adalah contoh:
hasil 2
hasil 3
kecuali stopiteration:
break
Dalam contoh ini, kita menangkap pengecualian stopiteration dan keluar dari gelung apabila tidak ada lebih banyak nilai untuk menghasilkan.
Tidak, anda tidak boleh menggunakan kata kunci hasil dalam fungsi lambda dalam python. Ini kerana fungsi Lambda terhad kepada satu ungkapan, dan kata kunci hasil memperkenalkan konteks pernyataan. Jika anda perlu membuat fungsi penjana, anda perlu menggunakan pernyataan DEF untuk menentukan fungsi biasa.
Atas ialah kandungan terperinci Petua cepat: Memahami kata kunci hasil dalam python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!