Fungsi Lambda dalam pemrograman Python adalah fungsi anonim atau fungsi yang tidak memiliki nama. Ini adalah fungsi kecil dan terbatas yang tidak memiliki lebih dari satu baris. Sama seperti fungsi normal, fungsi Lambda dapat memiliki beberapa argumen dengan satu ekspresi
Dalam Python, ekspresi lambda (atau bentuk lambda) digunakan untuk membangun fungsi anonim. Untuk melakukannya, Anda akan menggunakan kata kunci lambda (sama seperti Anda menggunakan def untuk mendefinisikan fungsi normal). Setiap fungsi anonim yang Anda tentukan dengan Python akan memiliki 3 bagian penting
- Kata kunci lambda
- Parameter (atau variabel terikat), dan
- Badan fungsi
Fungsi lambda dapat memiliki sejumlah parameter, tetapi badan fungsi hanya dapat berisi satu ekspresi. Selain itu, lambda ditulis dalam satu baris kode dan juga dapat dipanggil dengan segera. Anda akan melihat semua ini beraksi dalam contoh yang akan datang
Dalam tutorial Lambda dalam Python ini, Anda akan belajar
Sintaks dan Contoh
Sintaks formal untuk menulis fungsi lambda adalah seperti yang diberikan di bawah ini
lambda p1, p2: expressionDi sini, p1 dan p2 adalah parameter yang diteruskan ke fungsi lambda. Anda dapat menambahkan parameter sebanyak atau sesedikit yang Anda butuhkan
Namun, perhatikan bahwa kami tidak menggunakan tanda kurung di sekitar parameter seperti yang kami lakukan dengan fungsi biasa. Bagian terakhir (ekspresi) adalah ekspresi python yang valid yang beroperasi pada parameter yang Anda berikan ke fungsi
Contoh 1
Sekarang setelah Anda tahu tentang lambda, mari kita coba dengan sebuah contoh. Jadi, buka IDLE Anda dan ketik berikut ini
adder = lambda x, y: x + y print (adder (1, 2)) _Inilah hasilnya
3Penjelasan Kode
Di sini, kita mendefinisikan variabel yang akan menampung hasil yang dikembalikan oleh fungsi lambda
1. Kata kunci lambda digunakan untuk mendefinisikan fungsi anonim
2. x dan y adalah parameter yang kita berikan ke fungsi lambda
3. Ini adalah isi dari fungsi, yang menambahkan 2 parameter yang kita lewati. Perhatikan bahwa itu adalah ekspresi tunggal. Anda tidak dapat menulis banyak pernyataan di badan fungsi lambda
4. Kami memanggil fungsi dan mencetak nilai yang dikembalikan
Contoh 2
Itu adalah contoh dasar untuk memahami dasar-dasar dan sintaks lambda. Sekarang mari kita coba mencetak lambda dan lihat hasilnya. Sekali lagi, buka IDLE Anda dan ketik berikut ini
#What a lambda returns string='some kind of a useless lambda' print(lambda string : print(string))Sekarang simpan file Anda dan tekan F5 untuk menjalankan program. Ini adalah output yang harus Anda dapatkan
Keluaran
Apa yang sedang terjadi disini?
Penjelasan Kode
- Di sini, kami mendefinisikan string yang akan Anda berikan sebagai parameter ke lambda
- Kami mendeklarasikan lambda yang memanggil pernyataan cetak dan mencetak hasilnya
Tetapi mengapa program tidak mencetak string yang kita lewati? . Dalam contoh ini, lambda tidak dipanggil oleh fungsi cetak tetapi hanya mengembalikan objek fungsi dan lokasi memori tempat penyimpanannya. Itulah yang dicetak di konsol
Contoh 3
Namun, jika Anda menulis program seperti ini
#What a lambda returns #2 x="some kind of a useless lambda" (lambda x : print(x))(x)Dan jalankan dengan menekan F5, Anda akan melihat output seperti ini
Keluaran
some kind of a useless lambda_Sekarang, lambda sedang dipanggil, dan string yang kami berikan akan dicetak di konsol. Tapi apa sintaks aneh itu, dan mengapa definisi lambda tercakup dalam tanda kurung?
Penjelasan Kode
- Ini adalah string yang sama yang kita definisikan pada contoh sebelumnya
- Pada bagian ini, kita mendefinisikan lambda dan segera memanggilnya dengan meneruskan string sebagai argumen. Ini adalah sesuatu yang disebut IIFE, dan Anda akan mempelajarinya lebih lanjut di bagian selanjutnya dari tutorial ini
Contoh 4
Mari kita lihat contoh terakhir untuk memahami bagaimana lambda dan fungsi reguler dijalankan. Jadi, buka IDLE Anda dan di file baru, ketik berikut ini
#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 'printer 1 REGULAR CALL' ) guru( printer_two, 'printer 2 REGULAR CALL \n' ) #CALL A REGULAR FUNCTION THRU A LAMBDA guru(lambda: printer_one('printer 1 LAMBDA CALL')) guru(lambda: printer_two('printer 2 LAMBDA CALL'))Sekarang, simpan file dan tekan F5 untuk menjalankan program. Jika Anda tidak membuat kesalahan, hasilnya akan seperti ini
Keluaran
printer 1 PANGGILAN BIASA
printer 2 PANGGILAN BIASA
printer 1 PANGGILAN LAMBDA
printer 2 PANGGILAN LAMBDA
Penjelasan Kode
- Fungsi bernama guru yang menggunakan fungsi lain sebagai parameter pertama dan argumen lain yang mengikutinya
- printer_one adalah fungsi sederhana yang mencetak parameter yang diteruskan ke sana dan mengembalikannya
- printer_two mirip dengan printer_one tetapi tanpa pernyataan pengembalian
- Pada bagian ini, kita memanggil fungsi guru dan meneruskan fungsi printer dan string sebagai parameter
- Ini adalah sintaks untuk mencapai langkah keempat (i. e. , memanggil fungsi guru) tetapi menggunakan lambdas
Di bagian selanjutnya, Anda akan mempelajari cara menggunakan fungsi lambda dengan map(), reduce(), dan filter() dengan Python
Menggunakan lambda dengan built-in Python
Fungsi Lambda memberikan cara yang elegan dan andal untuk melakukan operasi menggunakan metode bawaan di Python. Hal ini dimungkinkan karena lambda dapat langsung dipanggil dan diteruskan sebagai argumen untuk fungsi-fungsi ini
IIFE dengan Python Lambda
IIFE adalah singkatan dari eksekusi fungsi yang segera dipanggil. Ini berarti bahwa fungsi lambda dapat dipanggil segera setelah didefinisikan. Mari kita pahami ini dengan sebuah contoh;
Berikut adalah output dan penjelasan kode
Kemampuan lambda untuk dipanggil segera memungkinkan Anda untuk menggunakannya di dalam fungsi seperti map() dan reduce(). Ini berguna karena Anda mungkin tidak ingin menggunakan fungsi ini lagi
lambda di filter()
Fungsi filter digunakan untuk memilih beberapa elemen tertentu dari urutan elemen. Urutannya dapat berupa iterator seperti daftar, set, tupel, dll
Elemen-elemen yang akan dipilih didasarkan pada beberapa kendala yang telah ditentukan sebelumnya. Dibutuhkan 2 parameter
- Fungsi yang menentukan batasan pemfilteran
- Urutan (setiap iterator seperti daftar, tupel, dll. )
Sebagai contoh,
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result)) _Inilah hasilnya
adder = lambda x, y: x + y print (adder (1, 2)) _0Penjelasan Kode
1. Dalam pernyataan pertama, kami mendefinisikan daftar yang disebut urutan yang berisi beberapa angka
2. Di sini, kita mendeklarasikan sebuah variabel bernama filtered_result, yang akan menyimpan nilai yang difilter yang dikembalikan oleh fungsi filter()
3. Fungsi lambda yang berjalan pada setiap elemen daftar dan mengembalikan true jika lebih besar dari 4
4. Cetak hasil yang dikembalikan oleh fungsi filter
lambda di peta()
fungsi peta digunakan untuk menerapkan operasi tertentu ke setiap elemen secara berurutan. Seperti filter(), ini juga membutuhkan 2 parameter
- Fungsi yang mendefinisikan op untuk tampil pada elemen
- Satu atau lebih urutan
Sebagai contoh, berikut adalah program yang mencetak kuadrat angka dalam daftar yang diberikan
adder = lambda x, y: x + y print (adder (1, 2)) _1Keluaran
adder = lambda x, y: x + y print (adder (1, 2)) _2[KR1]
Penjelasan Kode
- Di sini, kami mendefinisikan daftar yang disebut urutan yang berisi beberapa angka
- Kami mendeklarasikan variabel bernama filtered_result yang akan menyimpan nilai yang dipetakan
- Fungsi lambda yang berjalan pada setiap elemen daftar dan mengembalikan kuadrat dari angka tersebut
- Cetak hasil yang dikembalikan oleh fungsi peta
lambda di kurangi()
Fungsi pengurangan, seperti map(), digunakan untuk menerapkan operasi ke setiap elemen secara berurutan. Namun, ini berbeda dari peta dalam cara kerjanya. Ini adalah langkah-langkah yang diikuti oleh fungsi reduce() untuk menghitung output
Langkah 1) Lakukan operasi yang ditentukan pada 2 elemen pertama dari urutan
Langkah 2) Simpan hasil ini
Langkah 3) Lakukan operasi dengan hasil yang disimpan dan elemen berikutnya dalam urutan
Langkah 4) Ulangi sampai tidak ada lagi elemen yang tersisa
Ini juga membutuhkan dua parameter
- Fungsi yang mendefinisikan operasi yang akan dilakukan
- Urutan (setiap iterator seperti daftar, tupel, dll. )
Misalnya, berikut adalah program yang mengembalikan produk dari semua elemen dalam daftar
adder = lambda x, y: x + y print (adder (1, 2)) _3Inilah hasilnya
adder = lambda x, y: x + y print (adder (1, 2)) _4Penjelasan Kode
- Impor pengurangan dari modul functools
- Di sini, kami mendefinisikan daftar yang disebut urutan yang berisi beberapa angka
- Kami mendeklarasikan variabel yang disebut product yang akan menyimpan nilai yang dikurangi
- Fungsi lambda yang berjalan di setiap elemen daftar. Ini akan mengembalikan produk dari nomor itu sesuai hasil sebelumnya
- Cetak hasil yang dikembalikan oleh fungsi pengurangan
Mengapa (dan mengapa tidak) menggunakan fungsi lambda?
Seperti yang akan Anda lihat di bagian selanjutnya, lambda diperlakukan sama seperti fungsi reguler di tingkat juru bahasa. Di satu sisi, Anda dapat mengatakan bahwa lambda menyediakan sintaks ringkas untuk menulis fungsi yang mengembalikan satu ekspresi
Namun, Anda harus tahu kapan sebaiknya menggunakan lambda dan kapan harus menghindarinya. Di bagian ini, Anda akan mempelajari beberapa prinsip desain yang digunakan oleh pengembang python saat menulis lambda
Salah satu kasus penggunaan lambda yang paling umum adalah dalam pemrograman fungsional karena Python mendukung paradigma (atau gaya) pemrograman yang dikenal sebagai pemrograman fungsional
Ini memungkinkan Anda untuk menyediakan fungsi sebagai parameter ke fungsi lain (misalnya, di peta, filter, dll. ). Dalam kasus seperti itu, menggunakan lambda menawarkan cara yang elegan untuk membuat fungsi satu kali dan meneruskannya sebagai parameter
Kapan Anda tidak boleh menggunakan Lambda?
Anda tidak boleh menulis fungsi lambda yang rumit di lingkungan produksi. Akan sangat sulit bagi pembuat kode yang memelihara kode Anda untuk mendekripsinya. Jika Anda mendapati diri Anda membuat ekspresi satu baris yang kompleks, akan jauh lebih baik jika Anda mendefinisikan fungsi yang tepat. Sebagai praktik terbaik, Anda perlu mengingat bahwa kode sederhana selalu lebih baik daripada kode kompleks
Lambdas vs. Fungsi reguler
Seperti yang dinyatakan sebelumnya, lambda adalah [vV4][J5] hanya fungsi yang tidak memiliki pengenal yang terikat padanya. Dengan kata sederhana, mereka adalah fungsi tanpa nama (karenanya, anonim). Berikut adalah tabel untuk mengilustrasikan perbedaan antara lambda dan fungsi reguler di python
Lambda
Fungsi Reguler
Sintaksis
adder = lambda x, y: x + y print (adder (1, 2)) _5Sintaksis
adder = lambda x, y: x + y print (adder (1, 2)) _6Fungsi Lambda hanya dapat memiliki satu ekspresi di tubuhnya
Fungsi reguler dapat memiliki banyak ekspresi dan pernyataan di tubuhnya
Lambdas tidak memiliki nama yang terkait dengannya. Itu sebabnya mereka juga dikenal sebagai fungsi anonim
Fungsi reguler harus memiliki nama dan tanda tangan
Lambdas tidak berisi pernyataan pengembalian karena isi dikembalikan secara otomatis
Fungsi yang perlu mengembalikan nilai harus menyertakan pernyataan pengembalian
Penjelasan perbedaannya?
Perbedaan utama antara lambda dan fungsi reguler adalah bahwa fungsi lambda hanya mengevaluasi satu ekspresi dan menghasilkan objek fungsi. Akibatnya, kita dapat menamai hasil dari fungsi lambda dan menggunakannya dalam program kita seperti yang kita lakukan pada contoh sebelumnya
Fungsi reguler untuk contoh di atas akan terlihat seperti ini
adder = lambda x, y: x + y print (adder (1, 2)) _7Di sini, kita harus menentukan nama untuk fungsi yang mengembalikan hasil saat kita memanggilnya. Fungsi lambda tidak berisi pernyataan pengembalian karena hanya memiliki satu ekspresi yang selalu dikembalikan secara default. Anda bahkan tidak perlu menetapkan lambda karena dapat langsung dipanggil (lihat bagian selanjutnya). Seperti yang akan Anda lihat dalam contoh berikut, lambda menjadi sangat kuat saat kita menggunakannya dengan fungsi bawaan Python
Namun, Anda mungkin masih bertanya-tanya bagaimana lambda berbeda dari fungsi yang mengembalikan satu ekspresi (seperti yang di atas). Di tingkat juru bahasa, tidak banyak perbedaan. Ini mungkin terdengar mengejutkan, tetapi setiap fungsi lambda yang Anda definisikan dengan Python diperlakukan sebagai fungsi normal oleh juru bahasa
Seperti yang Anda lihat pada diagram, kedua definisi tersebut ditangani dengan cara yang sama oleh juru bahasa python saat dikonversi ke bytecode. Sekarang, Anda tidak dapat menamai fungsi lambda karena dicadangkan oleh Python, tetapi nama fungsi lainnya akan menghasilkan bytecode[KR6] yang sama