Lompati ke konten utama
Modul 5 · Pelajaran 4 dari 420/36 dalam kursus~10 min
Pelajaran modul (4/4)

Lambda dan fungsi tingkat tinggi

lambda adalah fungsi anonim, yang didefinisikan dalam satu baris. Sintaksis:

Python
lambda parametri: espressione

Setara dengan def, namun lebih ringkas dan cocok untuk "sekali pakai" fungsi untuk diteruskan ke fungsi lain.

Python
quadrato = lambda x: x ** 2
quadrato(5)    # 25

# equivalent to:
def quadrato(x):
    return x ** 2

Perbedaan vs def

Aspekdeflambda
namadiperlukananonim
tubuhbanyak pernyataanekspresi TUNGGAL
kembalieksplisitimplisit (ekspresi)
dokumenyatidak

Tidak ada return di dalam lambda: nilai ekspresi ADALAH hasilnya.

Kapan menggunakan lambda

Hampir selalu: sebagai argumen key untuk fungsi pengurutan atau pemilihan.

Python
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']

key=len memberi tahu sorted: "untuk membandingkan dua elemen, gunakan panjangnya". Untuk kriteria khusus, gunakan lambda:

Python
utenti = [
    {"nome": "Ada", "eta": 36},
    {"nome": "Linus", "eta": 54},
    {"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending age

Kegunaan umum lainnya: min(...), max(...), filter(...), map(...).

Python
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n))   # -5 (maximum by absolute value)

Fungsi tingkat tinggi

Suatu fungsi adalah tingkat lebih tinggi jika ia menerima fungsi sebagai argumen atau mengembalikan satu. sorted, max, filter, map merupakan tingkat yang lebih tinggi. Lambda ada justru untuk membuat panggilan tingkat tinggi lebih mudah.

Kapan harus menghindari fungsi lambda

Fungsi Lambda berguna untuk operasi jangka pendek dan sekali pakai (seperti penyortiran cepat). Namun, jika Anda menetapkan lambda ke suatu variabel (misalnya double = lambda x: x * 2), biasanya lebih disukai menggunakan blok def standar untuk tujuan keterbacaan dan debugging (karena fungsi yang didefinisikan dengan def mempertahankan nama aslinya dalam penelusuran balik kesalahan).

Cobalah

Latihan#python.m5.l4.e1
Upaya: 0Memuat…

Mengingat daftar `kata = ['pisang', 'kiwi', 'mela', 'fragola']`, urutkan berdasarkan panjangnya menjadi `menurut_panjang`. Evaluasi `menurut_panjang`.

Memuat editor…
Tunjukkan petunjuk

kunci=len (atau lambda p: len(p)).

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#python.m5.l4.e2
Upaya: 0Memuat…

Mengingat daftar tupel `poin = [(1, 5), (3, 2), (2, 4)]`, urutkan berdasarkan elemen KEDUA dalam urutan menaik dan tetapkan ke `by_y`. Evaluasi `oleh_y`.

Memuat editor…
Tunjukkan petunjuk

lambda hal: hal[1]

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#python.m5.l4.e3
Upaya: 0Memuat…

Define an anonymous `lambda` function that takes a number `x` and returns `True` if the number is even, and `False` otherwise. Assign the lambda to the variable `is_even` and test it with `is_even(8)` as the last line.

Memuat editor…
Tunjukkan petunjuk

Tulis is_even = lambda x: x % 2 == 0 lalu panggil is_even(8).

Solusi tersedia setelah 3 upaya