fungsi tanpa nama
Pernahkah anda terfikir untuk menentukan fungsi panggil balik yang sangat pendek, tetapi tidak mahu menggunakan def untuk menulis fungsi yang begitu panjang. Adakah terdapat jalan pintas? Jawapannya ya.
Python menggunakan lambda untuk mencipta fungsi tanpa nama, iaitu, ia tidak lagi menggunakan bentuk standard pernyataan def untuk mentakrifkan fungsi.
Fungsi tanpa nama terutamanya mempunyai ciri-ciri berikut:
lambda hanyalah ungkapan, dan badan fungsi jauh lebih ringkas daripada def.
Isi lambda ialah ungkapan, bukan blok kod. Hanya logik terhad boleh dirangkumkan dalam ungkapan lambda.
Fungsi lambda mempunyai ruang nama sendiri dan tidak boleh mengakses parameter di luar senarai parameternya sendiri atau dalam ruang nama global.
Sintaks asas
lambda [arg1 [,arg2,.....argn]]:expression
Contoh:
# -*- coding: UTF-8 -*- sum = lambda num1 , num2 : num1 + num2; print( sum( 1 , 2 ) )
Hasil keluaran:
3
Nota: Walaupun ungkapan lambda membenarkan anda mentakrifkan fungsi mudah, penggunaannya adalah terhad. Anda hanya boleh menentukan satu ungkapan, dan nilainya ialah nilai pulangan akhir. Maksudnya, ia tidak boleh mengandungi ciri bahasa lain, termasuk berbilang pernyataan, ungkapan bersyarat, lelaran, pengendalian pengecualian, dsb.
Dalam fungsi tanpa nama, terdapat isu khas yang memerlukan perhatian Contohnya, tukar contoh di atas:
# -*- coding: UTF-8 -*- num2 = 100 sum1 = lambda num1 : num1 + num2 ; num2 = 10000 sum2 = lambda num1 : num1 + num2 ; print( sum1( 1 ) ) print( sum2( 1 ) )
Apa yang anda fikir akan menjadi output? Keluaran pertama ialah 101, kedua ialah 10001, hasilnya bukan, hasil keluaran adalah seperti ini:
10001 10001
Ini terutamanya kerana num2 dalam ungkapan lambda ialah pembolehubah bebas, dan nilai terikat pada masa jalan, bukannya ditakrifkan Ia terikat pada masa itu, yang berbeza daripada definisi parameter nilai lalai bagi fungsi. Oleh itu, disyorkan untuk menggunakan penyelesaian pertama apabila menghadapi situasi ini.