Apa Fungsi Lambda dengan Python?
Sebuah Fungsi Lambda dengan Python pemrograman 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 banyak argumen dengan satu ekspresi.
Dalam Python, ekspresi lambda (atau bentuk lambda) digunakan untuk membangun fungsi anonim. Untuk melakukannya, Anda akan menggunakan kata kunci lambda (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
- Fungsi tubuh.
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 langsung dipanggil. Anda akan melihat semua ini beraksi dalam contoh yang akan datang.
Dalam tutorial Lambda dengan Python ini, Anda akan belajar:
- Sintaks dan Contoh
- Menggunakan lambda dengan bawaan Python
- lambda di filter ()
- lambda di peta ()
- lambda di reduce ()
- Mengapa (dan mengapa tidak) menggunakan fungsi lambda?
- Fungsi Lambdas vs. Reguler
Sintaks dan Contoh
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 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 valid yang beroperasi pada parameter yang Anda berikan ke fungsi.
Contoh 1
Sekarang Anda tahu tentang lambda, mari kita coba dengan sebuah contoh. Jadi, buka IDLE Anda dan ketik yang berikut ini:
adder = lambda x, y: x + yprint (adder (1, 2))
Inilah hasilnya:
3
Penjelasan Kode
Di sini, kami mendefinisikan variabel yang akan menampung hasil yang dikembalikan oleh fungsi lambda.
1. Kata kunci lambda yang digunakan untuk mendefinisikan fungsi anonim.
2. x dan y adalah parameter yang kita berikan ke fungsi lambda.
3. Ini adalah badan 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 tadi contoh dasar untuk memahami fundamental dan sintaks lambda. Sekarang mari kita coba mencetak lambda dan lihat hasilnya. Sekali lagi, buka IDLE Anda dan ketik yang berikut ini:
#What a lambda returnsstring='some kind of a useless lambda'print(lambda string : print(string))
Sekarang simpan file Anda dan tekan F5 untuk menjalankan program. Ini adalah hasil yang harus Anda dapatkan.
Keluaran:
at 0x00000185C3BF81E0>
Apa yang sedang terjadi disini? Mari kita lihat kodenya untuk memahami lebih lanjut.
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? Ini karena lambda itu sendiri mengembalikan objek fungsi. Dalam contoh ini, lambda tidak dipanggil oleh fungsi cetak tetapi hanya mengembalikan objek fungsi dan lokasi memori di mana ia disimpan. Itulah yang dicetak di konsol.
Contoh 3
Namun, jika Anda menulis program seperti ini:
#What a lambda returns #2x="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 lewati dicetak di konsol. Tapi sintaks aneh apa itu, dan mengapa definisi lambda tercakup dalam tanda kurung? Mari kita pahami itu sekarang.
Penjelasan Kode
- Berikut adalah string yang sama yang kami definisikan di contoh sebelumnya.
- Di bagian ini, kita mendefinisikan lambda dan memanggilnya segera dengan melewatkan 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 FUNCTIONdef guru( funct, *args ):funct( *args )def printer_one( arg ):return print (arg)def printer_two( arg ):print(arg)#CALL A REGULAR FUNCTIONguru( printer_one, 'printer 1 REGULAR CALL' )guru( printer_two, 'printer 2 REGULAR CALL \n' )#CALL A REGULAR FUNCTION THRU A LAMBDAguru(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 REGULER
printer 2 PANGGILAN REGULER
printer 1 PANGGILAN LAMBDA
printer 2 PANGGILAN LAMBDA
Penjelasan Kode
- Fungsi yang disebut 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 belajar cara menggunakan fungsi lambda dengan map (), reduce (), dan filter () dengan Python.
Menggunakan lambda dengan bawaan Python
Fungsi Lambda menyediakan cara yang elegan dan andal untuk melakukan operasi menggunakan metode bawaan dengan Python. Hal ini dimungkinkan karena lambda dapat dipanggil segera dan diteruskan sebagai argumen untuk 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; jalankan IDLE Anda dan ketik berikut ini:
(lambda x: x + x)(2)
Berikut adalah output dan penjelasan kodenya:
Kemampuan lambda yang akan 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 bisa berupa iterator seperti list, set, tuple, dll.
Elemen yang akan dipilih didasarkan pada beberapa batasan yang telah ditentukan sebelumnya. Dibutuhkan 2 parameter:
- Sebuah fungsi yang mendefinisikan batasan pemfilteran
- Urutan (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))
Berikut hasilnya:
[10, 8, 7, 5, 11]
Penjelasan Kode:
1. Pada pernyataan pertama, kita mendefinisikan daftar yang disebut urutan yang berisi beberapa angka.
2. Di sini, kami mendeklarasikan variabel yang disebut filtered_result, yang akan menyimpan nilai yang difilter yang dikembalikan oleh fungsi filter ().
3. Fungsi lambda yang berjalan di setiap elemen daftar dan mengembalikan nilai 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:
- 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, 121, 0, 1]
[KR1]
Penjelasan Kode:
- Di sini, kami mendefinisikan daftar yang disebut urutan yang berisi beberapa angka.
- Kami mendeklarasikan variabel yang disebut filtered_result yang akan menyimpan nilai yang dipetakan
- Fungsi lambda yang berjalan di setiap elemen daftar dan mengembalikan kuadrat dari angka itu.
- Cetak hasil yang dikembalikan oleh fungsi peta.
lambda di reduce ()
Fungsi pengurangan, seperti map (), digunakan untuk menerapkan operasi ke setiap elemen secara berurutan. Namun, cara kerjanya berbeda dengan peta. 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 menentukan operasi yang akan dilakukan
- Urutan (iterator seperti daftar, tupel, dll.)
Misalnya, berikut adalah program yang mengembalikan produk dari semua elemen dalam daftar:
from functools import reducesequences = [1,2,3,4,5]product = reduce (lambda x, y: x*y, sequences)print(product)
Inilah hasilnya:
120
Penjelasan Kode:
- Impor pengurangan dari modul functools
- Di sini, kami mendefinisikan daftar yang disebut urutan yang berisi beberapa angka.
- Kami mendeklarasikan variabel yang disebut produk yang akan menyimpan nilai yang dikurangi
- Fungsi lambda yang berjalan di setiap elemen daftar. Ini akan mengembalikan produk dari angka 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 sintaksis 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 paling umum untuk lambda adalah dalam pemrograman fungsional karena Python mendukung paradigma (atau gaya) pemrograman yang dikenal sebagai pemrograman fungsional.
Ini memungkinkan Anda untuk memberikan 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 mengonsumsi 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, itu akan menjadi praktik yang jauh lebih baik untuk menentukan fungsi yang tepat. Sebagai praktik terbaik, Anda perlu ingat bahwa kode sederhana selalu lebih baik daripada kode kompleks.
Fungsi Lambdas vs. Reguler
Seperti yang dinyatakan sebelumnya, lambda adalah [vV4] [J5] hanya fungsi yang tidak memiliki pengenal yang terikat padanya. Dengan kata yang lebih sederhana, mereka adalah fungsi tanpa nama (karenanya, anonim). Berikut adalah tabel untuk mengilustrasikan perbedaan antara lambda dan fungsi reguler di python.
Lambdas
Fungsi Reguler
Sintaksis:
lambda x : x + x
Sintaksis:
def (x) :return x + x
Fungsi lambda hanya dapat memiliki satu ekspresi di tubuhnya.
Fungsi reguler dapat memiliki banyak ekspresi dan pernyataan di tubuhnya.
Lambdas tidak memiliki nama yang diasosiasikan dengannya. Itulah mengapa mereka juga dikenal sebagai fungsi anonim.
Fungsi reguler harus memiliki nama dan tanda tangan.
Lambdas tidak berisi pernyataan pengembalian karena badan dikembalikan secara otomatis.
Fungsi yang perlu mengembalikan nilai harus menyertakan pernyataan pengembalian.
Penjelasan perbedaannya?
Perbedaan utama antara lambda dan fungsi biasa adalah bahwa fungsi lambda hanya mengevaluasi satu ekspresi dan menghasilkan objek fungsi. Akibatnya, kita dapat memberi nama 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:
def adder (x, y):return x + yprint (adder (1, 2))
Di sini, kita harus menentukan nama untuk fungsi yang mengembalikan hasil saat kita memanggilnya . Fungsi lambda tidak berisi pernyataan return 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 pada 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 ekspresi tunggal (seperti yang di atas). Di level interpreter, tidak banyak perbedaan. Ini mungkin terdengar mengejutkan, tetapi fungsi lambda apa pun yang Anda tentukan dengan Python diperlakukan sebagai fungsi normal oleh penerjemah.
Seperti yang Anda lihat di diagram, kedua definisi ditangani dengan cara yang sama oleh interpreter python saat diubah menjadi bytecode. Sekarang, Anda tidak dapat menamai fungsi lambda karena dicadangkan 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 memiliki 3 bagian penting:
- Kata kunci lambda.
- Parameter (atau variabel terikat), dan
- Fungsi tubuh.
- Sintaks untuk menulis lambda adalah: parameter lambda: ekspresi
- Lambda dapat memiliki sejumlah parameter, tetapi tidak diapit oleh tanda kurung
- Lambda hanya dapat memiliki 1 ekspresi dalam badan fungsinya, yang dikembalikan secara default.
- Pada tingkat bytecode, tidak banyak perbedaan antara bagaimana lambda dan fungsi reguler ditangani oleh penerjemah.
- Lambdas mendukung IIFE melalui sintaks ini: (parameter lambda: ekspresi) (argumen)
- Lambdas biasanya digunakan dengan python built-in berikut:
- Filter: filter (parameter lambda: ekspresi, urutan-iterable)
- Peta: peta (parameter lambda: ekspresi, urutan-iterable)
- Kurangi: kurangi (lambda parameter1, parameter2: ekspresi, urutan-iterable)
- Jangan menulis fungsi lambda yang rumit dalam lingkungan produksi karena akan menyulitkan pengelola kode.
[J5] Saya sudah menambahkan tabel, tapi penjelasannya diperlukan untuk memahami perbedaannya.