Pelajaran modul (4/4)
Lambda dan fungsi tingkat tinggi
lambda adalah fungsi anonim, yang didefinisikan dalam satu baris. Sintaksis:
lambda parametri: espressioneSetara dengan def, namun lebih ringkas dan cocok untuk "sekali pakai"
fungsi untuk diteruskan ke fungsi lain.
quadrato = lambda x: x ** 2
quadrato(5) # 25
# equivalent to:
def quadrato(x):
return x ** 2Perbedaan vs def
| Aspek | def | lambda |
|---|---|---|
| nama | diperlukan | anonim |
| tubuh | banyak pernyataan | ekspresi TUNGGAL |
| kembali | eksplisit | implisit (ekspresi) |
| dokumen | ya | tidak |
Tidak ada return di dalam lambda: nilai ekspresi ADALAH hasilnya.
Kapan menggunakan lambda
Hampir selalu: sebagai argumen key untuk fungsi pengurutan atau pemilihan.
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:
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 ageKegunaan umum lainnya: min(...), max(...), filter(...), map(...).
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
Mengingat daftar `kata = ['pisang', 'kiwi', 'mela', 'fragola']`, urutkan berdasarkan panjangnya menjadi `menurut_panjang`. Evaluasi `menurut_panjang`.
Tunjukkan petunjuk
kunci=len (atau lambda p: len(p)).
Solusi tersedia setelah 3 upaya
Tinjau latihan
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`.
Tunjukkan petunjuk
lambda hal: hal[1]
Solusi tersedia setelah 3 upaya
Tantangan tambahan
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.
Tunjukkan petunjuk
Tulis is_even = lambda x: x % 2 == 0 lalu panggil is_even(8).
Solusi tersedia setelah 3 upaya