Lambda Funksiyalar. Ixcham va Samarali Kod Yozish
Lambda funksiyalar Python'da `lambda` kalit so'zi bilan aniqlangan kichik, nomi bo'lmagan funksiyalardir. Python'da lambda funksiyalarni qanday yaratish va foydalanishni o'rganing.
So'nggi yangilanish: 2024-12-29Lambda funksiyalar sizga qisqa va ixcham kod yozish imkonini beradi, bu esa ko'p hollarda kodingizni yanada samarali va o'qilishi oson qiladi.
Lambda Funksiyalar Nima?
Lambda funksiyalar - bu Python-da anonim (nomsiz) funksiyalarni yaratish usuli. Ular oddiy funksiyalarga o'xshaydi, lekin def
kalit so'zi bilan emas, balki lambda
kalit so'zi bilan aniqlanadi. Lambda funksiyalar odatda bir qatorli ifodalar bo'lib, ular murakkab mantiqni emas, balki oddiy hisob-kitoblarni bajarish uchun mo'ljallangan.
Lambda Funksiyalarning Sintaksisi
Lambda funksiyalarning umumiy sintaksisi quyidagicha:
lambda argumentlar: ifoda
Bu yerda:
lambda
- bu kalit so'zargumentlar
- funksiya qabul qiladigan parametrlar (nol yoki undan ko'p bo'lishi mumkin)ifoda
- funksiya bajaradigan amal va qaytaradigan natija
Oddiy Misol
Keling, oddiy lambda funksiya yarataylik va uni oddiy funksiya bilan taqqoslaylik:
# Oddiy funksiya
def kvadrat(x):
return x ** 2
# Lambda funksiya
lambda_kvadrat = lambda x: x ** 2
# Ikkala funksiyani ishlatish
print(kvadrat(5)) # Natija: 25
print(lambda_kvadrat(5)) # Natija: 25
Bu misolda, lambda_kvadrat
funksiyasi kvadrat
funksiyasi bilan bir xil vazifani bajaradi, lekin qisqaroq shaklda yozilgan.
Lambda Funksiyalarning Afzalliklari
- Ixchamlik: Lambda funksiyalar bir qatorli kod bilan murakkab funksiyalarni ifodalash imkonini beradi.
- Anonim: Ular nomsiz bo'lgani uchun, vaqtinchalik ishlatish uchun qulay.
- Funksional dasturlash:
map()
,filter()
, vareduce()
kabi funksional dasturlash usullarida juda foydali. - Samaradorlik: Ba'zi hollarda, lambda funksiyalar oddiy funksiyalarga qaraganda tezroq ishlashi mumkin.
Lambda Funksiyalarni Qo'llash
1. map() bilan Ishlatish
map()
funksiyasi bilan lambda funksiyalarni ishlatish juda qulay:
sonlar = [1, 2, 3, 4, 5]
kvadratlar = list(map(lambda x: x**2, sonlar))
print(kvadratlar) # Natija: [1, 4, 9, 16, 25]
2. filter() bilan Ishlatish
filter()
funksiyasi bilan lambda funksiyalarni ishlatish:
sonlar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
juft_sonlar = list(filter(lambda x: x % 2 == 0, sonlar))
print(juft_sonlar) # Natija: [2, 4, 6, 8, 10]
3. sort() va sorted() bilan Ishlatish
Lambda funksiyalarni ro'yxatlarni saralash uchun ham ishlatish mumkin:
talabalar = [
{'ism': 'Ali', 'baho': 85},
{'ism': 'Vali', 'baho': 92},
{'ism': 'Gani', 'baho': 78},
{'ism': 'Salim', 'baho': 95}
]
# Bahoga ko'ra saralash
saralangan_talabalar = sorted(talabalar, key=lambda x: x['baho'], reverse=True)
print(saralangan_talabalar)
4. reduce() bilan Ishlatish
reduce()
funksiyasi bilan lambda funksiyalarni ishlatish (Python 3 da functools
modulidan import qilish kerak):
from functools import reduce
sonlar = [1, 2, 3, 4, 5]
yigindi = reduce(lambda x, y: x + y, sonlar)
print(yigindi) # Natija: 15
Lambda Funksiyalarning Cheklovlari
- Bir qatorli: Lambda funksiyalar faqat bir ifodani o'z ichiga olishi mumkin.
- Murakkablik: Murakkab mantiq uchun oddiy funksiyalar yaxshiroq.
- O'qilishi: Ko'p ishlatilsa, kodni o'qish qiyinlashishi mumkin.
- Xatoliklarni aniqlash: Xatolarni aniqlash oddiy funksiyalarga qaraganda qiyinroq bo'lishi mumkin.
Amaliy Misol: Ro'yxatni Qayta Ishlash
Keling, lambda funksiyalarni turli usullarda qo'llab, ro'yxatni qayta ishlaydigan dastur yarataylik:
mahsulotlar = [
{'nom': 'Olma', 'narx': 5000, 'miqdor': 10},
{'nom': 'Banan', 'narx': 8000, 'miqdor': 5},
{'nom': 'Uzum', 'narx': 12000, 'miqdor': 3},
{'nom': 'Nok', 'narx': 6000, 'miqdor': 8},
{'nom': 'Anor', 'narx': 15000, 'miqdor': 4}
]
# 1. Umumiy qiymatni hisoblash
umumiy_qiymat = sum(map(lambda x: x['narx'] * x['miqdor'], mahsulotlar))
print(f"Umumiy qiymat: {umumiy_qiymat} so'm")
# 2. Narxi 10000 so'mdan yuqori mahsulotlarni filtrlash
qimmat_mahsulotlar = list(filter(lambda x: x['narx'] > 10000, mahsulotlar))
print("Qimmat mahsulotlar:", [m['nom'] for m in qimmat_mahsulotlar])
# 3. Mahsulotlarni narxi bo'yicha saralash
saralangan_mahsulotlar = sorted(mahsulotlar, key=lambda x: x['narx'], reverse=True)
print("Narxi bo'yicha saralangan mahsulotlar:")
for mahsulot in saralangan_mahsulotlar:
print(f"{mahsulot['nom']}: {mahsulot['narx']} so'm")
# 4. Har bir mahsulot uchun chegirma qo'llash (10%)
chegirmali_narxlar = list(map(lambda x: {**x, 'chegirma_narx': x['narx'] * 0.9}, mahsulotlar))
print("\nChegirmali narxlar:")
for mahsulot in chegirmali_narxlar:
print(f"{mahsulot['nom']}: {mahsulot['chegirma_narx']} so'm")
Bu misolda biz lambda funksiyalarni turli xil vaziyatlarda qo'lladik: ro'yxatni qayta ishlash, filtrlash, saralash va yangi ma'lumotlar qo'shish.
Tez-tez So'raladigan Savollar (TSS)
- S: Lambda funksiyalar oddiy funksiyalardan nimasi bilan farq qiladi?
J: Lambda funksiyalar bir qatorli, anonim funksiyalardir. Ular
def
kalit so'zi o'rnigalambda
kalit so'zi bilan aniqlanadi va faqat bitta ifodani o'z ichiga olishi mumkin. - S: Lambda funksiyalarni o'zgaruvchiga tayinlash kerakmi? J: Shart emas. Lambda funksiyalarni to'g'ridan-to'g'ri boshqa funksiyalarga argument sifatida berish mumkin.
- S: Lambda funksiyalar qachon ishlatilishi kerak?
J: Lambda funksiyalar qisqa, bir martalik ishlaydigan funksiyalar uchun foydali. Ular ko'pincha
map()
,filter()
, vasorted()
kabi funksiyalar bilan ishlatiladi. - S: Lambda funksiyalar ichida if-else operatorlarini ishlatish mumkinmi?
J: Ha, lekin cheklangan shaklda. Lambda funksiyalarda ternary operator yordamida shartli ifodalarni yozish mumkin:
lambda x: x if x > 0 else 0
- S: Lambda funksiyalar rekursiv bo'lishi mumkinmi? J: Texnik jihatdan mumkin, lekin bu tavsiya etilmaydi va cheklovlarga ega. Rekursiya uchun oddiy funksiyalardan foydalanish yaxshiroq.
- S: Lambda funksiyalar global o'zgaruvchilardan foydalana oladimi? J: Ha, lambda funksiyalar global o'zgaruvchilardan foydalanishi mumkin, lekin bu yaxshi amaliyot hisoblanmaydi.
- S: Lambda funksiyalarning ishlash tezligi oddiy funksiyalardan farq qiladimi? J: Ko'p hollarda sezilarli farq yo'q. Ba'zi hollarda lambda funksiyalar biroz tezroq ishlashi mumkin, lekin bu optimizatsiya uchun asosiy sabab bo'lmasligi kerak.
- S: Lambda funksiyalarni dokumentatsiya (docstring) bilan ta'minlash mumkinmi? J: Yo'q, lambda funksiyalar docstring-larni qo'llab-quvvatlamaydi. Bu ularning cheklovlaridan biri.
- S: Lambda funksiyalar obyektga yo'naltirilgan dasturlashda ishlatilishi mumkinmi? J: Ha, lambda funksiyalarni class metodlari sifatida ishlatish mumkin, lekin bu kamdan-kam hollarda qo'llaniladi va tavsiya etilmaydi.
- S: Lambda funksiyalarni debug qilish qiyinmi? J: Ha, lambda funksiyalarni debug qilish oddiy funksiyalarga qaraganda qiyinroq, chunki ular nomsiz va qisqa. Murakkab mantiq uchun oddiy funksiyalardan foydalanish tavsiya etiladi.
Xulosa
Lambda funksiyalar - bu Python-da kod yozishning qudratli va moslashuvchan usuli. Ular sizga qisqa va aniq kod yozish imkonini beradi, ayniqsa funksional dasturlash usullarida juda foydali. Biroq, ularni to'g'ri va o'rinli ishlatish muhim. Lambda funksiyalar murakkab mantiq uchun emas, balki oddiy, bir qatorli amallar uchun mo'ljallangan.
Lambda funksiyalarni o'z loyihalaringizda qo'llash orqali, siz kodingizni yanada ixcham va samarali qilishingiz mumkin. Biroq, har doim kodning o'qilishi va tushunarliligini ham hisobga oling. Agar lambda funksiya kodingizni murakkablashtirsa, oddiy funksiyadan foydalanish yaxshiroq bo'lishi mumkin.
Esda tuting, yaxshi kod - bu nafaqat ishlayotgan, balki boshqalar (shu jumladan kelajakdagi o'zingiz) uchun ham tushunarli bo'lgan kod. Lambda funksiyalar bu maqsadga erishishda sizga yordam berishi mumkin, lekin ularni oqilona ishlatish kerak.