Kadang kita hanya butuh function tiga kata — ambil elemen kedua tuple, kalikan dua — dan upacara penuh def, nama, dan docstring terasa berlebihan untuk sesuatu yang dipakai sekali lalu dibuang. Python menyediakan lambda: expression yang membuat function kecil tanpa nama, cukup dalam satu baris. Bentuk ini bukan pengganti def, melainkan pelengkap khusus untuk kebutuhan yang sempit. Chapter ini membahas sintaksnya, kegunaannya yang paling umum, dan batas yang membuat kita tetap membutuhkan def.

Sintaks Lambda #

Kata kunci lambda membuat function dari satu expression saja. Perhatikan anatomi berikut:

text
lambda parameter: expression

Tidak ada def, tidak ada nama, tidak ada return — hasil evaluasi expression otomatis menjadi nilai balik. Wujudnya:

python
kali_dua = lambda x: x * 2

print(kali_dua(7))
print(kali_dua(50))

Output yang Dihasilkan:

text
14
100

Expression lambda x: x * 2 menghasilkan object function, lalu object tersebut diikat ke nama kali_dua. Setelah itu, kali_dua dipanggil persis seperti function biasa: tanda kurung menjalankan badannya. Parameter juga bisa lebih dari satu — lambda a, b: a + b bekerja dengan a dan b, termasuk default seperti lambda a, b=10: a + b.

Kegunaan Utama: Argument key #

Alasan keberadaan lambda di Python hampir selalu berujung pada satu pola: dikirim sebagai argument key ke function seperti sorted(), min(), dan max(). Sebuah daftar produk berupa tuple (nama, harga) bisa diurutkan berdasarkan harganya:

python
produk = [("kopi", 25000), ("teh", 12000), ("susu", 18000)]

urut_harga = sorted(produk, key=lambda item: item[1])
print(urut_harga)

Output yang Dihasilkan:

text
[('teh', 12000), ('susu', 18000), ('kopi', 25000)]

Mari kita telaah baris kuncinya: key=lambda item: item[1]. Function sorted() memanggil lambda ini sekali untuk setiap elemen, memakai hasilnya sebagai dasar pengurutan. Lambda item: item[1] menerima satu tuple dan mengembalikan elemen indeks 1 — harganya. Tanpa key, sorted() akan membandingkan tuple secara utuh dan mengurutkan berdasarkan nama; dengan key, urutan mengikuti harga.

Pola yang sama bekerja untuk sorted() dengan reverse=True maupun untuk max():

python
siswa = [("Budi", 85), ("Siti", 92), ("Andi", 78)]

peringkat = sorted(siswa, key=lambda s: s[1], reverse=True)
print(peringkat)

terbaik = max(siswa, key=lambda s: s[1])
print(terbaik)

Output yang Dihasilkan:

text
[('Siti', 92), ('Budi', 85), ('Andi', 78)]
('Siti', 92)

Batasan: Satu Expression, Tanpa Statement #

Lambda hanya memuat satu expression — tidak ada statement if ...: blok, tidak ada for, tidak ada while, tidak ada assignment. Mencoba memasukkan statement langsung ditolak interpreter Python:

python
>>> genap = lambda x: if x % 2 == 0: "ya"
  File "<stdin>", line 1
    genap = lambda x: if x % 2 == 0: "ya"
                      ^^
SyntaxError: invalid syntax

Ini bukan kelemahan yang perlu diakali, melainkan desain yang menegaskan pembagian kerja: lambda untuk perhitungan pendek satu baris; def untuk segala hal yang lebih rumit. Ketika kebutuhan melampaui satu expression, solusinya bukan lambda bertingkat, melainkan def biasa yang bisa dikirim sebagai argument — sesuatu yang akan kita buktikan pada Chapter First-Class Functions.

Kapan Memilih Lambda atau def #

Pertimbangan praktisnya ringkas:

  • Lambda cocok ketika function pendek (satu expression), dipakai di satu tempat, dan maknanya langsung terbaca dari konteksnya — klasiknya argument key=.
  • def cocok ketika function dipakai di lebih dari satu tempat, butuh nama yang bermakna, perlu docstring, atau badannya lebih dari satu baris.