Python Fungsi Lambda dengan CONTOH
Apa Fungsi Lambda di Python?
A Fungsi Lambda di Python pemrograman adalah fungsi anonim atau fungsi yang tidak memiliki nama. Ini adalah fungsi kecil dan terbatas yang memiliki tidak lebih dari satu baris. Sama seperti fungsi normal, fungsi Lambda dapat memiliki banyak argumen dengan satu ekspresi.
In Python, ekspresi lambda (atau bentuk lambda) digunakan untuk membuat fungsi anonim. Untuk melakukannya, Anda akan menggunakan lambda kata kunci (seperti yang Anda gunakan def untuk mendefinisikan fungsi normal). Setiap fungsi anonim yang Anda definisikan Python akan memiliki 3 bagian penting:
- Kata kunci lambda.
- Parameter (atau variabel terikat), dan
- Tubuh fungsi.
Fungsi lambda dapat memiliki sejumlah parameter, namun isi fungsi hanya dapat berisi satu ekspresi. Selain itu, lambda ditulis dalam satu baris kode dan juga dapat langsung dipanggil. Anda akan melihat semua ini beraksi pada contoh berikut.
Sintaks dan Contohnya
Sintaks formal untuk menulis fungsi lambda adalah seperti yang diberikan di bawah ini:
lambda p1, p2: expression
Di sini, p1 dan p2 adalah parameter yang diteruskan ke fungsi lambda. Anda dapat menambahkan parameter sebanyak atau sesedikit yang Anda perlukan.
Namun, perhatikan bahwa kami tidak menggunakan tanda kurung di sekitar parameter seperti yang kami lakukan pada fungsi biasa. Bagian terakhir (ekspresi) adalah ekspresi python yang valid yang beroperasi pada parameter yang Anda berikan ke fungsi tersebut.
Contoh 1
Sekarang setelah Anda mengetahui tentang lambda, mari kita coba dengan sebuah contoh. Jadi, buka milikmu IDLE dan ketik yang berikut ini:
adder = lambda x, y: x + y print (adder (1, 2))
Berikut hasilnya:
3
Penjelasan 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 teruskan ke fungsi lambda.
3. Ini adalah isi fungsi, yang menambahkan 2 parameter yang kita lewati. Perhatikan bahwa ini 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 sintaksis lambda. Sekarang mari kita coba mencetak lambda dan lihat hasilnya. Sekali lagi, buka milik Anda IDLE dan ketik yang 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:
<function <lambda> at 0x00000185C3BF81E0>
Apa yang sedang terjadi disini? Mari kita lihat kodenya untuk memahami lebih jauh.
Penjelasan Kode
- Di sini, kami mendefinisikan a string yang akan Anda teruskan sebagai parameter ke lambda.
- Kami mendeklarasikan lambda yang memanggil pernyataan print dan mencetak hasilnya.
Tetapi mengapa program tidak mencetak string yang kita lewati? Hal ini karena lambda itu sendiri mengembalikan objek fungsi. Dalam contoh ini, lambda tidak ada bernama dengan fungsi cetak tetapi sederhana kembali 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 dipanggil, dan string yang kita masukkan dicetak di konsol. Namun, apa sintaksis aneh itu, dan mengapa definisi lambda ditutupi tanda kurung? Mari kita pahami sekarang.
Penjelasan Kode
- Ini adalah string yang sama yang kita definisikan pada contoh sebelumnya.
- Di 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 milikmu IDLE dan pada file baru, ketik yang 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 melakukan kesalahan apa pun, hasilnya akan seperti ini.
Keluaran:
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Penjelasan Kode
- Suatu fungsi bernama guru yang mengambil 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 return.
- Di bagian ini, kita memanggil fungsi guru dan meneruskan fungsi printer dan string sebagai parameter.
- Ini adalah sintaks untuk mencapai langkah keempat (yaitu memanggil fungsi guru) tetapi menggunakan lambda.
Di bagian selanjutnya, Anda akan mempelajari cara menggunakan fungsi lambda dengan peta(), mengurangi(), dan Saring() in Python.
Menggunakan lambda dengan Python bawaan
Fungsi Lambda menyediakan cara yang elegan dan canggih untuk melakukan operasi menggunakan metode bawaan di Python. Hal ini dimungkinkan karena lambda dapat langsung dipanggil dan diteruskan sebagai argumen ke fungsi-fungsi ini.
IIFE di Python Lambda
IIFE singkatan segera memanggil eksekusi fungsi. Artinya fungsi lambda dapat dipanggil segera setelah didefinisikan. Mari kita pahami ini dengan sebuah contoh; nyalakan milikmu IDLE dan ketik yang berikut ini:
(lambda x: x + x)(2)
Berikut output dan penjelasan kodenya:
Kemampuan lambda untuk segera dipanggil memungkinkan Anda menggunakannya di dalam fungsi seperti map() dan pengurangan(). Ini berguna karena Anda mungkin tidak ingin menggunakan fungsi ini lagi.
lambda di filter()
Fungsi filter digunakan untuk memilih beberapa elemen tertentu dari rangkaian elemen. Urutannya dapat berupa iterator apa saja seperti daftar, set, tupel, dll.
Elemen yang akan dipilih didasarkan pada beberapa batasan yang telah ditentukan sebelumnya. Dibutuhkan 2 parameter:
- Sebuah fungsi yang mendefinisikan batasan pemfilteran
- Urutan (iterator apa pun 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:
[10, 8, 7, 5, 11]
Penjelasan Kode:
1. Pada pernyataan pertama, kami mendefinisikan suatu daftar yang disebut deret yang berisi beberapa angka.
2. Di sini, kita mendeklarasikan variabel bernama filtered_result, yang akan menyimpan nilai terfilter yang dikembalikan oleh fungsi filter().
3. Fungsi lambda yang berjalan pada setiap elemen daftar dan mengembalikan nilai true jika lebih besar dari 4.
4. Cetak hasil yang dikembalikan oleh fungsi filter.
lambda di peta()
fungsi map digunakan untuk menerapkan operasi tertentu ke setiap elemen dalam suatu urutan. Seperti filter(), fungsi ini juga memerlukan 2 parameter:
- Sebuah fungsi yang mendefinisikan operasi yang akan dilakukan pada elemen
- Satu atau lebih urutan
Misalnya, berikut adalah program yang mencetak kuadrat angka dalam daftar yang diberikan:
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
Keluaran:
[100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
[KR1]
Penjelasan Kode:
- Di sini, kita mendefinisikan daftar yang disebut deret 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 pengurangan()
Fungsi reduce, seperti map(), digunakan untuk menerapkan operasi ke setiap elemen dalam suatu urutan. Namun, fungsi ini berbeda dari map dalam cara kerjanya. Berikut ini adalah langkah-langkah yang diikuti oleh fungsi reduce() untuk menghitung output:
Langkah 1) Lakukan operasi yang ditentukan pada 2 elemen pertama dari urutan tersebut.
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 (iterator apa pun seperti daftar, tupel, dll.)
Misalnya, berikut adalah program yang mengembalikan produk dari semua elemen dalam daftar:
from functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
Berikut hasilnya:
120
Penjelasan Kode:
- Impor pengurangan dari modul functools
- Di sini, kita mendefinisikan daftar yang disebut deret yang berisi beberapa angka.
- Kami mendeklarasikan variabel bernama produk yang akan menyimpan nilai yang dikurangi
- Fungsi lambda yang berjalan pada setiap elemen daftar. Ini akan mengembalikan produk dari angka tersebut sesuai dengan hasil sebelumnya.
- Cetak hasil yang dikembalikan oleh fungsi pengurangan.
Mengapa (dan mengapa tidak) menggunakan fungsi lambda?
Seperti yang akan Anda lihat di bagian berikutnya, lambda diperlakukan sama seperti fungsi reguler di tingkat juru bahasa. Bisa dibilang, lambda menyediakan sintaksis ringkas untuk fungsi penulisan 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 sebagai 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, penggunaan lambda menawarkan cara 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 mengelola kode Anda untuk mendekripsinya. Jika Anda mendapati diri Anda membuat ekspresi satu baris yang rumit, akan jauh lebih baik jika Anda mendefinisikan fungsi yang tepat. Sebagai praktik terbaik, Anda perlu mengingat bahwa kode sederhana selalu lebih baik daripada kode yang rumit.
Fungsi Lambdas vs. Reguler
Seperti yang dinyatakan sebelumnya, lambda adalah [vV4] [J5] hanyalah 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
sintaks:
lambda x : x + x
sintaks:
def (x) : return x + x
Fungsi Lambda hanya dapat memiliki satu ekspresi di tubuhnya.
Fungsi reguler dapat memiliki banyak ekspresi dan pernyataan di dalamnya.
Lambdas tidak memiliki nama yang terkait dengannya. Itu sebabnya fungsi ini juga dikenal sebagai fungsi anonim.
Fungsi reguler harus memiliki nama dan tanda tangan.
Lambdas tidak berisi pernyataan return karena isi dikembalikan secara otomatis.
Fungsi yang perlu mengembalikan nilai harus menyertakan pernyataan return.
Penjelasan perbedaannya?
Perbedaan utama antara lambda dan fungsi reguler adalah fungsi lambda hanya mengevaluasi satu ekspresi dan menghasilkan objek fungsi. Akibatnya, kita dapat memberi nama hasil fungsi lambda dan menggunakannya dalam program kita seperti yang kita lakukan pada contoh sebelumnya.
Fungsi reguler untuk contoh di atas akan terlihat seperti ini:
def adder (x, y): return x + y print (adder (1, 2))
Di sini, kita harus mendefinisikan a nama untuk fungsi yang Pengembalian hasilnya ketika kita panggilan Fungsi lambda tidak mengandung pernyataan return karena hanya akan memiliki satu ekspresi yang selalu dikembalikan secara default. Anda bahkan tidak perlu menetapkan lambda karena dapat langsung dipanggil (lihat bagian berikutnya). Seperti yang akan Anda lihat dalam contoh berikut, lambda menjadi sangat kuat saat kita menggunakannya dengan Pythonfungsi bawaannya.
Namun, Anda mungkin masih bertanya-tanya apa perbedaan lambda dengan fungsi yang mengembalikan ekspresi tunggal (seperti di atas). Pada level interpreter, tidak banyak perbedaan. Ini mungkin terdengar mengejutkan, tetapi fungsi lambda apa pun yang Anda tetapkan Python diperlakukan sebagai fungsi normal oleh penerjemah.
Seperti yang Anda lihat pada diagram, kedua definisi tersebut ditangani dengan cara yang sama oleh juru bahasa python ketika dikonversi ke bytecode. Sekarang, Anda tidak dapat memberi nama suatu fungsi lambda karena dipesan oleh Python, tetapi nama fungsi lainnya akan menghasilkan bytecode[KR6] yang sama.
Ringkasan
- Lambdas, juga dikenal sebagai fungsi anonim, adalah fungsi kecil dan terbatas yang tidak memerlukan nama (yaitu pengenal).
- Setiap fungsi lambda di Python mempunyai 3 bagian penting:
- Kata kunci lambda.
- Parameter (atau variabel terikat), dan
- Tubuh fungsi.
- Sintaks untuk menulis lambda adalah: parameter lambda: ekspresi
- Lambdas dapat memiliki sejumlah parameter, namun tidak diapit kurung kurawal
- Lambda hanya dapat memiliki 1 ekspresi di isi fungsinya, yang dikembalikan secara default.
- Pada tingkat bytecode, tidak banyak perbedaan antara cara lambda dan fungsi reguler ditangani oleh penerjemah.
- Lambdas mendukung IIFE melalui sintaks ini: (parameter lambda: ekspresi)(argumen)
- Lambda umumnya digunakan dengan python bawaan berikut:
- Filter: filter (parameter lambda: ekspresi, urutan yang dapat diubah)
- Peta: peta (parameter lambda: ekspresi, urutan yang dapat diubah)
- Kurangi: kurangi (lambda parameter1, parameter2: ekspresi, urutan yang dapat diubah)
- Jangan menulis fungsi lambda yang rumit di lingkungan produksi karena akan menyulitkan pengelola kode.
[J5]Saya telah menambahkan tabel, namun penjelasannya diperlukan untuk memahami perbedaannya.