Default arguments, *args, **kwargs
Assalomu alaykum! 😊 Bugun biz Python’da funksiyalarning ilg‘or tushunchalari: default arguments (standart argumentlar), *args va **kwargs haqida o‘rganamiz. Bu usullar funksiyalarni yanada moslashuvchan va kuchli qiladi.
Default argumentlar funksiyaga standart qiymat berish imkonini beradi. Agar funksiya chaqirilganda argument kiritilmasa, standart qiymat ishlatiladi.
def salom_ber(ism="Mehmon"):
print(f"Assalomu alaykum, {ism}!")
salom_ber() # Natija: Assalomu alaykum, Mehmon!
salom_ber("Ali") # Natija: Assalomu alaykum, Ali!
Default argumentlar funksiya ta'rifida har doim oddiy (standart qiymatga ega bo'lmagan) argumentlardan keyin kelishi shart.
# To'g'ri
def mahsulot(nomi, narxi=1000):
pass
# Noto'g'ri (SyntaxError)
def xato_funksiya(narxi=1000, nomi):
pass
Buyurtma uchun mahsulot nomini va (ixtiyoriy) sonini kiriting.
*args funksiyaga o‘zgaruvchan (noma'lum) miqdordagi pozitsion argumentlar uzatish imkonini beradi. Funksiya ichida bu argumentlar tuple (kortej) sifatida qabul qilinadi.
def barcha_sonlar(*sonlar):
print(f"Siz kiritgan sonlar (tuple): {sonlar}")
print(f"Yig‘indi: {sum(sonlar)}")
barcha_sonlar(1, 2, 3)
# Natija:
# Siz kiritgan sonlar (tuple): (1, 2, 3)
# Yig‘indi: 6
barcha_sonlar(4, 5, 6, 7, 8)
# Natija:
# Siz kiritgan sonlar (tuple): (4, 5, 6, 7, 8)
# Yig‘indi: 30
*args oddiy argumentlar bilan birga ishlatilishi mumkin, lekin u har doim oddiy argumentlardan keyin kelishi kerak.
def salom_ber(ism, *xabarlar):
print(f"Salom, {ism}!")
for xabar in xabarlar:
print(f"- {xabar}")
salom_ber("Zilola", "Bugun dars bor!", "Vaqt 10:00")
Vergul bilan ajratilgan bir nechta son kiriting va ularning yig'indisini hisoblang.
**kwargs funksiyaga o‘zgaruvchan miqdordagi nomlangan (kalit so'zli) argumentlar uzatish imkonini beradi. Funksiya ichida bu argumentlar dictionary (lug'at) sifatida qabul qilinadi.
def malumotlar(**ma’lumot):
print(f"Ma'lumotlar (dictionary): {ma’lumot}")
for kalit, qiymat in ma’lumot.items():
print(f"{kalit.title()}: {qiymat}")
malumotlar(ism="Sardor", yosh=16, sinf="10-sinf")
# Natija:
# Ma'lumotlar (dictionary): {'ism': 'Sardor', 'yosh': 16, 'sinf': '10-sinf'}
# Ism: Sardor
# Yosh: 16
# Sinf: 10-sinf
Oddiy, *args va **kwargs birga ishlatilganda, ularning qat'iy tartibi bor:
ism)*args**kwargs
def katta_funksiya(ism, *ballar, **qoshimcha):
print(f"Ism: {ism}")
print(f"Ballar: {ballar}")
print(f"Qo‘shimcha: {qoshimcha}")
katta_funksiya("Ali", 90, 85, 95, yosh=15, fan="Matematika")
Foydalanuvchi ma'lumotlarini 'kalit=qiymat' formatida, vergul bilan ajratib kiriting.
Endi o‘rganganlarimizni amalda sinab ko‘ramiz! Quyidagi mashqlarni bajaring.
kopaytirish(a, b=3) nomli funksiya yarating, u a ni b ga ko‘paytirib natijani chiqarsin. Funksiyani kopaytirish(4) va kopaytirish(5, 2) sifatida chaqiring.
def kopaytirish(a, b=3):
print(f"{a} * {b} = {a * b}")
kopaytirish(4) # Natija: 4 * 3 = 12
kopaytirish(5, 2) # Natija: 5 * 2 = 10
barcha_sozlar(*sozlar) nomli funksiya yarating, u barcha so‘zlarni bir qatorga birlashtirib chiqarsin. Funksiyani ("Salom", "dunyo") va ("Python", "o‘rganish", "juda", "qiziq") uchun chaqiring.
def barcha_sozlar(*sozlar):
birlashma = " ".join(sozlar)
print(birlashma)
barcha_sozlar("Salom", "dunyo")
barcha_sozlar("Python", "o‘rganish", "juda", "qiziq")
mahsulot_malumotlari(**kwargs) nomli funksiya yarating, u faqat nomi va narxi ni chiqarsin. Funksiyani nomi="Telefon", narxi=5000000, rang="qora" argumentlari bilan chaqiring.
def mahsulot_malumotlari(**kwargs):
if "nomi" in kwargs:
print(f"Nomi: {kwargs['nomi']}")
if "narxi" in kwargs:
print(f"Narxi: {kwargs['narxi']}")
mahsulot_malumotlari(
nomi="Telefon",
narxi=5000000,
rang="qora"
)
Ajoyib! Bugun biz Python’da funksiyalarning ilg‘or usullari — default arguments, *args va **kwargsni o'rgandik. Bu vositalar yordamida yanada moslashuvchan, qayta ishlatiluvchan va kuchli funksiyalar yozishingiz mumkin.
tuple sifatida qabul qiladi.dictionary sifatida qabul qiladi.ayirish(a, b=5) nomli funksiya yarating, u a dan b ni ayirib natijani chiqarsin. Funksiyani ayirish(10) va ayirish(15, 3) sifatida chaqiring.sonlar_kopaytmasi(*sonlar) nomli funksiya yarating, u barcha kiritilgan sonlarning ko‘paytmasini chiqarsin. (Maslahat: sikl ishlating).talaba_malumotlari(**kwargs) nomli funksiya yarating, u faqat ism va sinf qiymatlarini chiqarsin. Funksiyani ism="Sardor", yosh=16, sinf="10-sinf" argumentlari bilan chaqiring.Keyingi darsda esa Rekursiv Funksiyalar mavzusini o‘rganamiz.
Ajoyib ish qildingiz! Endi o'rganganlarimizni mustahkamlab olamiz.
Funksiyaning ba'zi parametrlari ko'p hollarda bir xil qiymatga ega bo'lganda, lekin ba'zida uni o'zgartirish kerak bo'lganda juda qulay.
Funksiyaga oldindan sanog'i noma'lum bo'lgan argumentlarni (masalan, yig'indini hisoblash uchun bir nechta son) uzatish uchun ishlatiladi.
Kalit so'z (nom) bilan berilgan argumentlarni qabul qiladi. Bu funksiyaga sozlamalar (configurations) yoki ixtiyoriy atributlarni uzatish uchun juda qulay.
Qandaydir tushunmovchiliklar qoldimi? Hozir muhokama qilish uchun ayni vaqti. Bemalol savollaringizni bering! 😊