Fungsi lambda di Python adalah alat yang kuat dan ringkas untuk membuat fungsi kecil tanpa nama secara cepat. Fungsi ini sempurna untuk menyederhanakan tugas jangka pendek, merapikan kode dengan fungsi tingkat tinggi seperti map, filter, atau sorted, serta mengurangi keruwetan saat mendefinisikan logika sementara atau sekali pakai. Fungsi lambda juga menawarkan solusi elegan untuk meningkatkan keterbacaan kode dalam skenario sederhana. Artikel ini akan membahas apa itu fungsi lambda, karakteristiknya, dan cara menggunakannya secara efektif.
Dalam panduan ini, kami akan memberikan panduan lengkap tentang fungsi lambda di Python, mencakup mekanismenya, sintaksnya, dan bagaimana perbandingannya dengan fungsi standar, dengan contoh sederhana untuk mengilustrasikan konsep kunci. Kami membahas kasus penggunaan umum, seperti penggunaan fungsi lambda dalam paradigma pemrograman fungsional dan efisiensinya dibandingkan fungsi standar. Contoh praktis dan praktik terbaik disertakan untuk membantu Anda memasukkan fungsi lambda secara efektif ke dalam pemrograman Python Anda.
Apa itu Fungsi Lambda di Python?
Fungsi lambda berbeda dari fungsi Python standar dalam beberapa hal penting. Fungsi ini merupakan ekspresi anonim, artinya tidak memiliki nama kecuali secara eksplisit ditetapkan ke sebuah variabel. Fungsi lambda juga lebih ringkas dan didefinisikan dalam satu baris tanpa memerlukan pernyataan return. Ini membuatnya ideal untuk operasi sederhana yang sekali pakai dan untuk digunakan sebagai argumen inline pada fungsi tingkat tinggi seperti map, filter, dan sorted.
Berikut contoh fungsi lambda yang menjumlahkan dua angka:
fn =lambda x, y: x + y
print(fn)# <function <lambda> at 0xe508b8>Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Fungsi standar ini mudah dipahami. Kata kunci def mendefinisikan fungsi yang menerima dua argumen, x dan y. Fungsi ini menghitung jumlah x dan y dan mengembalikan hasilnya.
Sekarang, mari lihat bagaimana fungsi lambda kita mencapai tugas yang sama.
# Example: add two numbers using a lambda function
fn =lambda x, y: x + y
print(fn)# <function <lambda> at 0xbfb968>Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Kata kunci lambda menandakan bahwa kita sedang mendefinisikan fungsi lambda, sehingga tidak perlu menggunakan kata kunci def. Setelah kata kunci lambda, dicantumkan argumen masukan x dan y. Setelah titik dua, kita menentukan ekspresi yang hasilnya akan dikembalikan, yaitu x + y.
Menulis Fungsi Lambda di Python: Contoh
Agar Anda lebih memahami konsep yang telah kita bahas sejauh ini, mari lihat beberapa contoh cara kerja fungsi Lambda di Python.
Panduan langkah demi langkah menulis fungsi lambda
Fungsi lambda ideal untuk membuat fungsi pendek dan lugas tanpa kompleksitas tambahan.
Misalnya, anggap Anda ingin memeriksa apakah suatu bilangan bulat bukan nol adalah genap. Anda bisa menulis fungsi Python standar, tetapi fungsionalitas yang sama dapat dicapai dengan fungsi lambda satu baris yang ringkas dan ditetapkan ke sebuah variabel: is_even = lambda x: x % 2 == 0.
Di sini, fungsi lambda di sisi kanan penugasan menerima masukan x dan mengembalikan True jika x genap (yaitu jika sisa bagi saat dibagi 2 adalah 0).
Fungsi lambda ini kemudian ditetapkan ke variabel is_even, sehingga dapat dipanggil seperti fungsi biasa. Misalnya, is_even(5) (mengembalikan False) dan is_even(678432) (mengembalikan True).
Fungsi lambda juga sangat berguna untuk mendefinisikan rumus sederhana. Misalnya, untuk mengonversi Celsius ke Fahrenheit, Anda dapat menggunakan fungsi lambda: c_to_f = lambda c: (c * 9/5) + 32. Anda kemudian memanggil fungsi tersebut seperti fungsi lainnya: c_to_f(0).
Kasus penggunaan umum untuk fungsi lambda
Fungsi lambda sering digunakan dalam pemrograman fungsional, khususnya dengan fungsi seperti map() dan filter() yang menerima fungsi lain sebagai argumen untuk memproses elemen dalam sebuah koleksi. Mari lihat cara menggunakan fungsi lambda dengan filter(). Berikut cuplikan kodenya:
# Use filter with lambda function
numbers =[1,2,3,4,5,6,7,8]
evens =filter(lambda x: x %2==0, numbers)print(list(evens))# print the list of the filter object to see the result# [2, 4, 6, 8]Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Dalam kode ini, kita mulai dengan mendefinisikan himpunan numbers. Selanjutnya, kita membuat fungsi lambda untuk memeriksa apakah suatu angka genap. Fungsi filter menerapkan fungsi lambda ini ke himpunan numbers. Lalu, kita mencetak daftar bilangan genap yang diidentifikasi oleh fungsi filter.
Demikian pula, kita dapat menggunakan fungsi map untuk menerapkan lambda ke suatu koleksi elemen. Pada contoh di bawah, kita menghitung panjang string dalam sebuah daftar dengan memetakan fungsi len() ke setiap elemen.
# Use map with lambda function
fruits =['apple','banana','cherry']
lengths =list(map(lambda x:len(x), fruits))print(lengths)# [5, 6, 6]Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Fungsi lambda juga digunakan dengan fungsi sorted(), yang mengurutkan elemen sebuah koleksi untuk mengembalikan koleksi baru. Pada contoh berikut (tanpa lambda), kita menggunakan fungsi sorted() untuk mengurutkan daftar angka.
Misalkan kita ingin mengurutkan daftar angka berdasarkan nilai absolut. Bagaimana cara mencapainya? Fungsi sorted() memiliki argumen key yang memungkinkan kita menyesuaikan urutan pengurutan dengan memberikan fungsi lambda.
# Sort according to absolute value
sorted_numbers_absolute =sorted(numbers, key=lambda x:abs(x))print(sorted_numbers_absolute)# [1, -1, 3, 5, 10, -10]Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Kasus penggunaan lain untuk sort() dengan fungsi lambda adalah mengurutkan daftar tuple berdasarkan elemen tertentu, misalnya elemen kedua.
# Sort a list of tuples by the second element
data =[(1,3),(2,1),(4,2)]
sorted_data =sorted(data, key=lambda x: x[1])print(sorted_data)# [(2, 1), (4, 2), (1, 3)]Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Pada cuplikan kode ini, kita mendefinisikan data sebagai daftar tuple. Lalu kita menggunakan fungsi sorted() dengan parameter key, di mana fungsi lambda mengekstrak elemen kedua dari setiap tuple untuk proses pengurutan.
Apakah Fungsi Lambda Lebih Cepat di Python?
Di Python, fungsi lambda tidak secara bawaan lebih cepat daripada fungsi standar, karena keduanya dikompilasi menjadi bytecode yang serupa. Namun, fungsi lambda dapat sedikit mengurangi overhead dalam kasus ketika mendefinisikan fungsi penuh akan menambah boilerplate yang tidak perlu.
Berikut beberapa kasus uji yang membandingkan fungsi lambda dengan fungsi Python standar. Kode dijalankan di laptop saya, MacBook Pro dengan chip Apple M1 Pro, memori 16 GB, menjalankan macOS Sequoia 15.2.
Fungsi lambda dapat digunakan inline sebagai fungsi anonim saat diteruskan langsung ke fungsi tingkat tinggi seperti map(), filter(), atau sorted(). Ini menghindari kebutuhan untuk mendefinisikan dan mereferensikan fungsi bernama terpisah, mengurangi boilerplate dan overhead pencarian.
import time
numbers =list(range(1,1000000))# Standard functiondefdouble_standard(x):return x *2
start = time.time()map(double_standard, numbers)print(time.time()- start)# Lambda function
double_lambda =map(lambda x: x *2, numbers)
start = time.time()list(map(lambda x: x *2, numbers))print(time.time()- start)# 3.504753112792969e-05# 2.384185791015625e-05Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Fungsi lambda ideal untuk penggunaan sekali atau sementara, karena menghilangkan kebutuhan akan blok def formal, menghemat waktu dan ruang. Pada blok kode berikut, kami membandingkan kinerja fungsi standar dengan fungsi lambda. Kami mengurutkan kamus dengan satu juta elemen, di mana kuncinya adalah kode dua huruf acak, dan nilainya adalah bilangan bulat acak.
import random
import string
# Generate a dictionary with elements of the form 'XX': number.
NUMBER_ITEMS =1000000
items ={''.join(random.choices(string.ascii_uppercase, k=2)): random.randint(1,100)for _ inrange(NUMBER_ITEMS)}# Standard function (extra definition step)defsort_standard(item):return item[1]print('Standard')
start = time.time()
sorted_items_standard =sorted(items, key=sort_standard)print(time.time()- start)print(sorted_items_standard[:5])print()# Lambda functionprint('Lambda')
start = time.time()
sorted_items_lambda =sorted(items, key=lambda x: x[1])print(time.time()- start)print(sorted_items_lambda[:5])print()# Standard# 0.00011610984802246094# ['OA', 'VA', 'XA', 'IA', 'BA']# Lambda# 0.00011014938354492188# ['OA', 'VA', 'XA', 'IA', 'BA']Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Mari kita bahas beberapa contoh yang lebih praktis untuk menunjukkan bagaimana fungsi Lambda bekerja di Python.
Contoh praktis
Fungsi lambda sering digunakan dengan metode bawaan Python. Misalnya, mari lihat penggunaan reduce() untuk menerapkan fungsi biner yang ditentukan pengguna secara kumulatif pada item dalam sebuah urutan.
# Example: Use lambda function with built-in Python method reduce.from functools importreduce
numbers =[5,-6,2,7]
total =reduce(lambda x, y: x + y, numbers)print(f'The sum of the numbers is {total}.')# The sum of the numbers is 8.Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Mirip dengan filter() atau map() di atas, reduce() menerapkan sebuah fungsi, di sini diberikan oleh lambda, ke sekumpulan elemen.
Sekarang, mari jelajahi fungsi bawaan Python lainnya, zip(). Fungsi zip memasangkan elemen yang bersesuaian dari beberapa daftar ke dalam tuple. Misalnya, hasil dari zip(['a', 'b', 'c'], [1, 2, 3]) adalah [('a', 1), ('b', 2), ('c', 3)].
# Example: Use lambda function with built-in Python method zip.
list1 =[1,2,3]
list2 =[4,5,6]# Using zip and a lambda function to multiply corresponding elements
result =list(map(lambda x: x[0]* x[1],zip(list1, list2)))print(f'The result of multiplying corresponding elements is {result}.')# The result of multiplying corresponding elements is [4, 10, 18].Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Kode ini menghitung hasil kali elemen yang bersesuaian dari dua daftar, list1 dan list2. Kode menggunakan zip() untuk memasangkan elemen dari kedua daftar ke dalam tuple, lalu menerapkan fungsi lambda dengan map() untuk mengalikan elemen yang dipasangkan, dan akhirnya mengonversi hasilnya menjadi daftar.
Contoh dunia nyata: transformasi data
Bayangkan Anda menjalankan kios buah dan ingin menghitung total penjualan untuk setiap jenis buah.
Pertama, kita membuat beberapa catatan penjualan. Lalu, kita menggunakan map() dengan fungsi lambda untuk menghitung total_sales dengan mengalikan harga dan kuantitas untuk setiap item dalam kamus sales_data. Sintaks **record membongkar kamus asli, memastikan semua key dan value-nya tetap dipertahankan dalam kamus baru. Terakhir, kita mencetak setiap catatan dari data yang telah ditransformasikan.
# Sample data: list of dictionaries representing sales records
sales_data =[{'fruit':'peaches','price':1.41,'quantity':3},{'fruit':'pears','price':1.21,'quantity':2},{'fruit':'mangoes','price':0.56,'quantity':3},]# Using a lambda function to calculate total sales for each record
transformed_data =list(map(lambda entry:{**entry,'total_sales':round(entry['price']* entry['quantity'],2)},
sales_data
))# Print the transformed datafor record in transformed_data:print(record)# {'fruit': 'peaches', 'price': 1.41, 'quantity': 3, 'total_sales': 4.23}# {'fruit': 'pears', 'price': 1.21, 'quantity': 2, 'total_sales': 2.42}# {'fruit': 'mangoes', 'price': 0.56, 'quantity': 3, 'total_sales': 1.68}Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Jika Anda ingin berlatih menggunakan fungsi lambda, berikut beberapa soal yang bisa dicoba.
Diberi sebuah angka, temukan kuadratnya.
Diberi dua angka, temukan mana yang lebih besar.
Diberi sebuah angka, periksa apakah angka tersebut ganjil.
Diberi daftar bilangan bulat positif, saring semua bilangan ganjil.
Urutkan daftar tuple 3-elemen berdasarkan elemen ketiganya.
Ekstrak domain dari alamat email. Misalnya, dari [email protected], ekstrak example.com.
Kesalahan umum terkait lambda
Mari lihat beberapa kesalahan umum yang dilakukan pemrogram dengan lambda dan solusinya.
1. Kesalahan pertama adalah menggunakan fungsi lambda saat tidak tepat. Penting untuk diingat bahwa fungsi lambda dirancang untuk tugas-tugas pendek dan sederhana, bukan untuk menangani logika kompleks. Misalnya, cuplikan kode berikut bukan kasus penggunaan ideal untuk fungsi lambda.
# Complex logic in a lambda
result =lambda x:(x **2+ x -1)/(x +1if x !=-1else1)print(result(5))# Hard to understand# 4.833333333333333Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
2. Kesalahan sederhana lainnya adalah tertukar sintaksnya. Misalnya, lupa menuliskan kata kunci lambda akan menghasilkan error. Kesalahan sintaks umum lainnya adalah tidak menyertakan argumen masukan:
# Forgetting the required arguments
numbers =[1,2,3,4]
squared =map(lambda: x **2, numbers)# <-- Where is the input argument? Error: lambda missing argumentDidukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
3. Kesalahan lain yang perlu diwaspadai adalah tidak menyertakan logika untuk kasus tepi. Misalnya, kode ini gagal saat y bernilai 0. Solusinya adalah menyertakan pernyataan if sederhana untuk menangkap kasus bermasalah atau membungkus kode dalam blok pengecualian.
# Dividing without handling zero
divide =lambda x, y: x / y
safe_divide =lambda x, y: x / y if y !=0else"undefined"print(safe_divide(5,0))# undefinedDidukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
4. Masalah yang lebih halus adalah lupa mengonversi iterator ke daftar saat menampilkan hasil. Misalnya, fungsi map() mengembalikan objek map, bukan daftar. Untuk mengakses hasilnya, konversikan objek map menjadi list.
# Forgetting to convert to a list
numbers =[1,2,3]
squared =map(lambda x: x **2, numbers)print(squared)# <-- squared is the map, not the result# <map object at 0x106d2b0>print(list(squared))# list(squared) gives the result# [1, 4, 9]Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Lalu, bagaimana cara kita melakukan debugging pada lambda? Berikut beberapa kemungkinan.
Uraikan lambda. Sementara waktu, ubah menjadi fungsi bernama untuk keperluan debugging.
Gunakan pernyataan print untuk menampilkan nilai antara pada fungsi tingkat tinggi seperti map() atau filter().
Uji kasus tepi. Uji dengan nilai ekstrem, tidak valid, atau batas untuk menangkap potensi kesalahan.
Trik yang berguna untuk mencetak langkah perantara adalah menyertakan pernyataan print di dalam sebuah tuple bersama hasilnya. Keluaran yang diinginkan kemudian dapat diteruskan ke fungsi tingkat tinggi dengan mengindeks tuple pada posisi 1.
Berikut contohnya:
numbers =[1,2,3,4,5]# Lambda function with print to debug intermediate values
filtered_numbers =filter(lambda x:(print(f'Checking: {x} -> {x >=3}'), x >=3)[1], numbers)# Converting filter object to list to force evaluationprint(list(filtered_numbers))# Checking: 1 -> False# Checking: 2 -> False# Checking: 3 -> True# Checking: 4 -> True# Checking: 5 -> True# [3, 4, 5]Didukung oleh
Editor Learn-by-Example, tekan Tab untuk Masuk. Tekan Escape lalu Tab atau Shift+Tab untuk navigasi keluar.
Dalam kode ini, digunakan sebuah trik untuk mencetak langkah perantara saat menyaring daftar angka. Fungsi lambda dalam filter menyertakan sebuah tuple: elemen pertama adalah pernyataan print yang mencatat angka saat ini dan apakah angka tersebut memenuhi kondisi (x >= 3), dan elemen kedua adalah kondisinya sendiri.
Bagian [1] di akhir lambda memastikan bahwa kondisi (x >= 3) dikembalikan ke fungsi filter sambil memungkinkan pernyataan print dieksekusi untuk debugging.
Mengonversi objek filter menjadi daftar memaksa evaluasi semua elemen, memicu pernyataan print untuk setiap angka. Pendekatan ini membantu men-debug logika sambil mempertahankan fungsionalitas operasi penyaringan.
Praktik Terbaik Menggunakan Fungsi Lambda
Praktik terbaik dalam menggunakan fungsi lambda melibatkan pemahaman kapan fungsi ini tepat digunakan dan kapan sebaiknya dihindari.
Kapan menggunakan fungsi Lambda
Logika pendek dan sederhana. Ideal untuk operasi ringkas yang tidak memerlukan definisi fungsi penuh.
Fungsi tingkat tinggi. Bekerja efektif sebagai argumen untuk fungsi tingkat tinggi seperti map(), filter(), atau sorted().
Fungsi sementara (sekali pakai). Berguna saat fungsi hanya dibutuhkan sekali, dan mendefinisikannya dengan def hanya akan menambah keruwetan kode secara tidak perlu.
Keterbacaan yang lebih baik. Cocok untuk tugas sederhana di mana penggunaan fungsi lambda membuat kode tetap ringkas dan mudah diikuti.
Kapan menghindari fungsi Lambda
Logika kompleks atau multibaris. Lambda terbatas pada satu ekspresi dan dapat dengan cepat menjadi sulit dibaca untuk operasi yang lebih rumit.
Fungsi yang dapat digunakan ulang atau diberi nama. Jika fungsi perlu digunakan kembali atau diuntungkan dari nama yang deskriptif, fungsi standar def lebih tepat.
Debugging atau dokumentasi. Fungsi lambda tidak dapat menyertakan docstring dan bisa lebih sulit di-debug dibandingkan fungsi bernama.
Untuk meningkatkan keterbacaan dan kemudahan pemeliharaan saat menggunakan lambda, ikuti praktik terbaik berikut:
Gunakan nama yang deskriptif untuk kejelasan.
Tetap sederhana: Lambda idealnya cukup satu baris dan merepresentasikan logika yang lugas.
Batasi perangkaian (nesting): Hindari menggunakan fungsi lambda di dalam fungsi lambda lain atau struktur data yang kompleks kecuali diperlukan.
Utamakan keterbacaan daripada keringkasan: Jika penggunaan lambda mengorbankan keterbacaan, lebih baik mendefinisikan fungsi bernama.
Kesimpulan
Fungsi lambda Python adalah alat yang ampuh untuk menulis fungsi anonim yang ringkas. Fungsi ini unggul dalam skenario yang memerlukan operasi singkat, sementara, atau inline, terutama saat digunakan dengan fungsi tingkat tinggi seperti map, filter, atau sorted.
Namun, penggunaannya harus bijak, karena logika yang lebih kompleks lebih cocok ditangani oleh fungsi standar yang didefinisikan dengan def. Dengan memahami kekuatan, keterbatasan, dan praktik terbaiknya, Anda dapat memanfaatkan fungsi lambda secara efektif untuk menulis kode Python yang bersih, efisien, dan mudah dipelihara.
Untuk mempelajari lebih lanjut tentang fungsi Python, lihat sumber daya DataCamp.
Fungsi ini sempurna untuk menyederhanakan tugas jangka pendek, merapikan kode dengan fungsi tingkat tinggi seperti map, filter, atau sorted, dan mengurangi keruwetan saat mendefinisikan logika sementara atau sekali pakai.
Kapan saya harus menggunakan fungsi lambda?⌄
Fungsi lambda tepat digunakan untuk: logika pendek dan sederhana yang cocok untuk satu baris, sebagai argumen fungsi untuk fungsi tingkat tinggi seperti map() atau filter(), dan untuk fungsi sementara yang hanya dibutuhkan sekali.
Kapan saya harus menghindari fungsi lambda?⌄
Fungsi lambda mungkin bukan pilihan terbaik untuk logika yang kompleks atau fungsi yang memerlukan dokumentasi (seperti docstring).
Mark Pedigo, PhD, adalah seorang data scientist terkemuka dengan keahlian dalam data science kesehatan, pemrograman, dan pendidikan. Dengan gelar PhD di bidang Matematika, B.S. di bidang Ilmu Komputer, serta Sertifikat Profesional di bidang AI, Mark memadukan pengetahuan teknis dengan pemecahan masalah praktis. Kariernya mencakup peran dalam deteksi kecurangan, prediksi kematian bayi, dan peramalan keuangan, serta kontribusi pada perangkat lunak estimasi biaya NASA. Sebagai pendidik, ia telah mengajar di DataCamp dan Washington University in St. Louis serta membimbing programmer junior. Di waktu luang, Mark menikmati alam Minnesota bersama istrinya, Mandy, dan anjingnya, Harley, serta bermain piano jazz.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Kembangkan keterampilan data Anda, pelajari cara mengolah dan memvisualisasikan data, serta terapkan analisis canggih untuk mengambil keputusan berbasis data.
Fungsi lambda di Python adalah alat yang kuat dan ringkas untuk membuat fungsi kecil tanpa nama secara cepat. Fungsi ini sempurna untuk menyederhanakan tugas jangka pendek, merapikan kode dengan fungsi tingkat tinggi seperti
map,filter, atausorted, serta mengurangi keruwetan saat mendefinisikan logika sementara atau sekali pakai. Fungsi lambda juga menawarkan solusi elegan untuk meningkatkan keterbacaan kode dalam skenario sederhana. Artikel ini akan membahas apa itu fungsi lambda, karakteristiknya, dan cara menggunakannya secara efektif.Dalam panduan ini, kami akan memberikan panduan lengkap tentang fungsi lambda di Python, mencakup mekanismenya, sintaksnya, dan bagaimana perbandingannya dengan fungsi standar, dengan contoh sederhana untuk mengilustrasikan konsep kunci. Kami membahas kasus penggunaan umum, seperti penggunaan fungsi lambda dalam paradigma pemrograman fungsional dan efisiensinya dibandingkan fungsi standar. Contoh praktis dan praktik terbaik disertakan untuk membantu Anda memasukkan fungsi lambda secara efektif ke dalam pemrograman Python Anda.
Apa itu Fungsi Lambda di Python?
Fungsi lambda berbeda dari fungsi Python standar dalam beberapa hal penting. Fungsi ini merupakan ekspresi anonim, artinya tidak memiliki nama kecuali secara eksplisit ditetapkan ke sebuah variabel. Fungsi lambda juga lebih ringkas dan didefinisikan dalam satu baris tanpa memerlukan pernyataan
return. Ini membuatnya ideal untuk operasi sederhana yang sekali pakai dan untuk digunakan sebagai argumen inline pada fungsi tingkat tinggi sepertimap,filter, dansorted.Berikut contoh fungsi lambda yang menjumlahkan dua angka:
Cara kerja fungsi lambda
Bagaimana fungsi lambda ini bekerja? Untuk memahaminya, mari bandingkan dengan fungsi Python standar.
Fungsi standar ini mudah dipahami. Kata kunci
defmendefinisikan fungsi yang menerima dua argumen,xdany. Fungsi ini menghitung jumlahxdanydan mengembalikan hasilnya.Sekarang, mari lihat bagaimana fungsi lambda kita mencapai tugas yang sama.
Kata kunci
lambdamenandakan bahwa kita sedang mendefinisikan fungsi lambda, sehingga tidak perlu menggunakan kata kuncidef. Setelah kata kuncilambda, dicantumkan argumen masukanxdany. Setelah titik dua, kita menentukan ekspresi yang hasilnya akan dikembalikan, yaitux + y.Menulis Fungsi Lambda di Python: Contoh
Agar Anda lebih memahami konsep yang telah kita bahas sejauh ini, mari lihat beberapa contoh cara kerja fungsi Lambda di Python.
Panduan langkah demi langkah menulis fungsi lambda
Fungsi lambda ideal untuk membuat fungsi pendek dan lugas tanpa kompleksitas tambahan.
Misalnya, anggap Anda ingin memeriksa apakah suatu bilangan bulat bukan nol adalah genap. Anda bisa menulis fungsi Python standar, tetapi fungsionalitas yang sama dapat dicapai dengan fungsi lambda satu baris yang ringkas dan ditetapkan ke sebuah variabel:
is_even = lambda x: x % 2 == 0.Di sini, fungsi lambda di sisi kanan penugasan menerima masukan
xdan mengembalikanTruejikaxgenap (yaitu jika sisa bagi saat dibagi 2 adalah 0).Fungsi lambda ini kemudian ditetapkan ke variabel
is_even, sehingga dapat dipanggil seperti fungsi biasa. Misalnya,is_even(5)(mengembalikanFalse) danis_even(678432)(mengembalikanTrue).Fungsi lambda juga sangat berguna untuk mendefinisikan rumus sederhana. Misalnya, untuk mengonversi Celsius ke Fahrenheit, Anda dapat menggunakan fungsi lambda:
c_to_f = lambda c: (c * 9/5) + 32. Anda kemudian memanggil fungsi tersebut seperti fungsi lainnya:c_to_f(0).Kasus penggunaan umum untuk fungsi lambda
Fungsi lambda sering digunakan dalam pemrograman fungsional, khususnya dengan fungsi seperti
map()danfilter()yang menerima fungsi lain sebagai argumen untuk memproses elemen dalam sebuah koleksi. Mari lihat cara menggunakan fungsi lambda denganfilter(). Berikut cuplikan kodenya:Dalam kode ini, kita mulai dengan mendefinisikan himpunan
numbers. Selanjutnya, kita membuat fungsi lambda untuk memeriksa apakah suatu angka genap. Fungsifiltermenerapkan fungsi lambda ini ke himpunannumbers. Lalu, kita mencetak daftar bilangan genap yang diidentifikasi oleh fungsifilter.Demikian pula, kita dapat menggunakan fungsi
mapuntuk menerapkan lambda ke suatu koleksi elemen. Pada contoh di bawah, kita menghitung panjang string dalam sebuah daftar dengan memetakan fungsilen()ke setiap elemen.Fungsi lambda juga digunakan dengan fungsi
sorted(), yang mengurutkan elemen sebuah koleksi untuk mengembalikan koleksi baru. Pada contoh berikut (tanpa lambda), kita menggunakan fungsisorted()untuk mengurutkan daftar angka.Misalkan kita ingin mengurutkan daftar angka berdasarkan nilai absolut. Bagaimana cara mencapainya? Fungsi
sorted()memiliki argumenkeyyang memungkinkan kita menyesuaikan urutan pengurutan dengan memberikan fungsi lambda.Kasus penggunaan lain untuk
sort()dengan fungsilambdaadalah mengurutkan daftar tuple berdasarkan elemen tertentu, misalnya elemen kedua.Pada cuplikan kode ini, kita mendefinisikan
datasebagai daftar tuple. Lalu kita menggunakan fungsisorted()dengan parameterkey, di mana fungsi lambda mengekstrak elemen kedua dari setiap tuple untuk proses pengurutan.Apakah Fungsi Lambda Lebih Cepat di Python?
Di Python, fungsi lambda tidak secara bawaan lebih cepat daripada fungsi standar, karena keduanya dikompilasi menjadi bytecode yang serupa. Namun, fungsi lambda dapat sedikit mengurangi overhead dalam kasus ketika mendefinisikan fungsi penuh akan menambah boilerplate yang tidak perlu.
Berikut beberapa kasus uji yang membandingkan fungsi lambda dengan fungsi Python standar. Kode dijalankan di laptop saya, MacBook Pro dengan chip Apple M1 Pro, memori 16 GB, menjalankan macOS Sequoia 15.2.
Fungsi lambda dapat digunakan inline sebagai fungsi anonim saat diteruskan langsung ke fungsi tingkat tinggi seperti
map(),filter(), atausorted(). Ini menghindari kebutuhan untuk mendefinisikan dan mereferensikan fungsi bernama terpisah, mengurangi boilerplate dan overhead pencarian.Fungsi lambda ideal untuk penggunaan sekali atau sementara, karena menghilangkan kebutuhan akan blok
defformal, menghemat waktu dan ruang. Pada blok kode berikut, kami membandingkan kinerja fungsi standar dengan fungsi lambda. Kami mengurutkan kamus dengan satu juta elemen, di mana kuncinya adalah kode dua huruf acak, dan nilainya adalah bilangan bulat acak.Fungsi Lambda Python: Contoh dan Latihan
Mari kita bahas beberapa contoh yang lebih praktis untuk menunjukkan bagaimana fungsi Lambda bekerja di Python.
Contoh praktis
Fungsi lambda sering digunakan dengan metode bawaan Python. Misalnya, mari lihat penggunaan
reduce()untuk menerapkan fungsi biner yang ditentukan pengguna secara kumulatif pada item dalam sebuah urutan.Mirip dengan
filter()ataumap()di atas,reduce()menerapkan sebuah fungsi, di sini diberikan oleh lambda, ke sekumpulan elemen.Sekarang, mari jelajahi fungsi bawaan Python lainnya,
zip(). Fungsizipmemasangkan elemen yang bersesuaian dari beberapa daftar ke dalam tuple. Misalnya, hasil darizip(['a', 'b', 'c'], [1, 2, 3])adalah[('a', 1), ('b', 2), ('c', 3)].Kode ini menghitung hasil kali elemen yang bersesuaian dari dua daftar,
list1danlist2. Kode menggunakanzip()untuk memasangkan elemen dari kedua daftar ke dalam tuple, lalu menerapkan fungsi lambda denganmap()untuk mengalikan elemen yang dipasangkan, dan akhirnya mengonversi hasilnya menjadi daftar.Contoh dunia nyata: transformasi data
Bayangkan Anda menjalankan kios buah dan ingin menghitung total penjualan untuk setiap jenis buah.
Pertama, kita membuat beberapa catatan penjualan. Lalu, kita menggunakan
map()dengan fungsi lambda untuk menghitungtotal_salesdengan mengalikan harga dan kuantitas untuk setiap item dalam kamussales_data. Sintaks**recordmembongkar kamus asli, memastikan semua key dan value-nya tetap dipertahankan dalam kamus baru. Terakhir, kita mencetak setiap catatan dari data yang telah ditransformasikan.Soal sederhana untuk dilatih dengan fungsi lambda
Jika Anda ingin berlatih menggunakan fungsi lambda, berikut beberapa soal yang bisa dicoba.
[email protected], ekstrakexample.com.Kesalahan umum terkait lambda
Mari lihat beberapa kesalahan umum yang dilakukan pemrogram dengan lambda dan solusinya.
1. Kesalahan pertama adalah menggunakan fungsi lambda saat tidak tepat. Penting untuk diingat bahwa fungsi lambda dirancang untuk tugas-tugas pendek dan sederhana, bukan untuk menangani logika kompleks. Misalnya, cuplikan kode berikut bukan kasus penggunaan ideal untuk fungsi lambda.
Dalam kasus ini, lebih baik menggunakan fungsi Python standar saja.
2. Kesalahan sederhana lainnya adalah tertukar sintaksnya. Misalnya, lupa menuliskan kata kunci
lambdaakan menghasilkan error. Kesalahan sintaks umum lainnya adalah tidak menyertakan argumen masukan:Solusinya adalah menyertakan argumen masukan:
Cara yang baik untuk menangkap kesalahan seperti ini adalah dengan menyertakan kasus uji informal dan sederhana saat mengembangkan.
3. Kesalahan lain yang perlu diwaspadai adalah tidak menyertakan logika untuk kasus tepi. Misalnya, kode ini gagal saat
ybernilai 0. Solusinya adalah menyertakan pernyataanifsederhana untuk menangkap kasus bermasalah atau membungkus kode dalam blok pengecualian.4. Masalah yang lebih halus adalah lupa mengonversi iterator ke daftar saat menampilkan hasil. Misalnya, fungsi
map()mengembalikan objekmap, bukan daftar. Untuk mengakses hasilnya, konversikan objekmapmenjadilist.Strategi Debugging Fungsi Lambda Python
Lalu, bagaimana cara kita melakukan debugging pada lambda? Berikut beberapa kemungkinan.
map()ataufilter().Trik yang berguna untuk mencetak langkah perantara adalah menyertakan pernyataan
printdi dalam sebuah tuple bersama hasilnya. Keluaran yang diinginkan kemudian dapat diteruskan ke fungsi tingkat tinggi dengan mengindeks tuple pada posisi 1.Berikut contohnya:
Dalam kode ini, digunakan sebuah trik untuk mencetak langkah perantara saat menyaring daftar angka. Fungsi lambda dalam
filtermenyertakan sebuah tuple: elemen pertama adalah pernyataanprintyang mencatat angka saat ini dan apakah angka tersebut memenuhi kondisi (x >= 3), dan elemen kedua adalah kondisinya sendiri.Bagian
[1]di akhir lambda memastikan bahwa kondisi (x >= 3) dikembalikan ke fungsifiltersambil memungkinkan pernyataanprintdieksekusi untuk debugging.Mengonversi objek
filtermenjadi daftar memaksa evaluasi semua elemen, memicu pernyataanprintuntuk setiap angka. Pendekatan ini membantu men-debug logika sambil mempertahankan fungsionalitas operasi penyaringan.Praktik Terbaik Menggunakan Fungsi Lambda
Praktik terbaik dalam menggunakan fungsi lambda melibatkan pemahaman kapan fungsi ini tepat digunakan dan kapan sebaiknya dihindari.
Kapan menggunakan fungsi Lambda
map(),filter(), atausorted().defhanya akan menambah keruwetan kode secara tidak perlu.Kapan menghindari fungsi Lambda
deflebih tepat.Untuk meningkatkan keterbacaan dan kemudahan pemeliharaan saat menggunakan lambda, ikuti praktik terbaik berikut:
Kesimpulan
Fungsi lambda Python adalah alat yang ampuh untuk menulis fungsi anonim yang ringkas. Fungsi ini unggul dalam skenario yang memerlukan operasi singkat, sementara, atau inline, terutama saat digunakan dengan fungsi tingkat tinggi seperti
map,filter, atausorted.Namun, penggunaannya harus bijak, karena logika yang lebih kompleks lebih cocok ditangani oleh fungsi standar yang didefinisikan dengan
def. Dengan memahami kekuatan, keterbatasan, dan praktik terbaiknya, Anda dapat memanfaatkan fungsi lambda secara efektif untuk menulis kode Python yang bersih, efisien, dan mudah dipelihara.Untuk mempelajari lebih lanjut tentang fungsi Python, lihat sumber daya DataCamp.