Soal 1Manakah dari berikut ini yang merupakan lambda expression yang valid?
Lambda Expression — Menulis Fungsi Anonim dalam Satu Baris
Pelajari lambda expression Python untuk menulis fungsi anonim ringkas dalam satu baris.
Pada artikel sebelumnya tentang higher-order function, kamu sudah melihat cara meneruskan fungsi sebagai argumen dan nilai kembali. Mendefinisikan fungsi baru dengan def setiap kali kamu perlu menyerahkan callback berarti sebuah operasi satu baris tiba-tiba menjadi 3 atau 4 baris.
Di situlah lambda expression (lambda) berperan — mereka memungkinkan kamu menulis fungsi anonim dalam satu baris. Sempurna untuk potongan logika kecil yang tidak cukup pantas mendapatkan def penuh.
Apa Itu Lambda — Dibandingkan dengan def
Sintaksnya adalah lambda args: expression. Hasil dari expression langsung menjadi nilai kembali, dan kamu tidak menulis return (faktanya, melakukannya memicu SyntaxError).
Tidak seperti fungsi biasa, lambda tidak punya nama, jadi ia tidak bisa dipanggil kecuali kamu menetapkannya ke variabel. Nama variabel yang kamu tetapkan padanya secara efektif menjadi nama fungsinya.
# Ditulis dengan def
def add_tax(price):
return int(price * 1.1)
print(add_tax(980)) # 1078
# Logika sama sebagai lambda (tidak perlu return)
add_tax = lambda price: int(price * 1.1)
print(add_tax(980)) # 1078
Hanya Expression yang Diperbolehkan — Tidak Ada Statement
Badan lambda hanya bisa berisi expression (sesuatu yang dievaluasi menjadi nilai). Statement if, loop for, dan penetapan (=) tidak akan masuk. Begitu kamu ingin sesuatu yang lebih rumit, kembali ke def — itu pilihan yang tepat.
Lebih Banyak Argumen, Conditional Expression, dan Default
Lambda juga bisa menerima beberapa argumen. Cukup daftarkan dengan koma, seperti lambda x, y: x * y.
Kamu juga bisa memakai default argument dengan cara yang sama seperti pada def. Untuk mengganti nilai berdasarkan kondisi, masukkan conditional expression value1 if condition else value2 ke dalam badannya.
# Beberapa argumen
rect_area = lambda width, height: width * height
print(rect_area(4, 5)) # 20
# Default argument (hilangkan rate untuk memakai 0.1)
add_tax = lambda price, rate=0.1: int(price * (1 + rate))
print(add_tax(1000)) # 1100
print(add_tax(1000, 0.08)) # 1080
# Conditional expression
judge_age = lambda age: "dewasa" if age >= 20 else "anak-anak"
print(judge_age(25)) # dewasa
print(judge_age(17)) # anak-anak
# Kembalikan beberapa nilai sebagai tuple
stats = lambda x, y: (x + y, x * y)
print(stats(3, 4)) # (7, 12)
lambda menangani beberapa argumen, default argument, dan percabangan dengan conditional expression dengan rasa yang sama seperti def.Berpasangan dengan Higher-Order Function — Tempat Lambda Bersinar
Lambda benar-benar mendapatkan tempatnya saat kamu ingin menyerahkan fungsi sekali pakai ke higher-order function. Misalnya, argumen key pada sorted() adalah higher-order function yang menerima "fungsi yang mengembalikan kunci sortir dari setiap elemen."
Untuk urutan sortir yang tidak perlu kamu beri nama dan pakai ulang, menulis key=lambda x: x["price"] inline di sisi pemanggil adalah bentuk paling alami.
products = [
{"name": "Buku", "price": 480},
{"name": "Pena", "price": 120},
{"name": "Penghapus","price": 80},
]
# Sortir berdasarkan harga menaik (teruskan lambda inline sebagai key)
cheap_first = sorted(products, key=lambda item: item["price"])
for item in cheap_first:
print(item["name"], item["price"])
# Penghapus 80
# Pena 120
# Buku 480
# higher-order function yang sama process_list bisa mengganti perilaku via lambda
def process_list(numbers, func):
for n in numbers:
print(func(n))
process_list([1, 2, 3, 4], lambda x: x ** 2)
# 1
# 4
# 9
# 16
Kapan Memakai Lambda — dan Kapan Menghindarinya
Lambda nyaman, tetapi memakainya di mana-mana sebenarnya merusak keterbacaan. Tabel di bawah merangkumnya: gunakan lambda untuk operasi sekali pakai, satu baris, dan gunakan def untuk apa pun yang rumit atau dipakai ulang.
| Situasi | Rekomendasi | Alasan |
|---|---|---|
| Teruskan ke key pada sorted, filter, map | lambda | Satu baris menyampaikan maksud; tidak butuh nama |
| Expression satu baris seperti harga termasuk pajak | lambda | Fungsi pendek bernama tanpa import |
| Logika yang butuh if / for / try | def | lambda hanya untuk expression; statement memunculkan SyntaxError |
| Logika yang dipakai ulang dari banyak tempat | def | Nama menyampaikan maksud dan mendukung tes serta dokumentasi |
| Badan yang berjalan 3+ baris | def | Memaksakan ke lambda hanya merusak keterbacaan |
Jangan Memaksakan Semuanya ke Lambda
Tumpuk tiga conditional expression bersarang atau rangkai beberapa pemanggilan fungsi bersama dan kamu akan berakhir dengan kode yang berada pada satu baris tetapi tidak terbaca. Begitu kamu berpikir "Saya ingin meninggalkan komentar yang menjelaskan apa yang dilakukan lambda ini," beralihlah ke def.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa yang dicetak kode ini?f = lambda x, y=3: x ** y
print(f(2))
Soal 3Manakah dari berikut ini yang merupakan penggunaan lambda expression yang paling tepat?