⬅️ Bosh sahifaga

⚙️Advanced Functions

Default arguments, *args, **kwargs

🚀Kirish va Default Arguments

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.

Oddiy misol

def salom_ber(ism="Mehmon"):
    print(f"Assalomu alaykum, {ism}!")

salom_ber()       # Natija: Assalomu alaykum, Mehmon!
salom_ber("Ali")  # Natija: Assalomu alaykum, Ali!

⚠️ Muhim qoida!

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

🎮 Interaktiv Demo: Buyurtma berish

Buyurtma uchun mahsulot nomini va (ixtiyoriy) sonini kiriting.

📦*args bilan ishlash

*args funksiyaga o‘zgaruvchan (noma'lum) miqdordagi pozitsion argumentlar uzatish imkonini beradi. Funksiya ichida bu argumentlar tuple (kortej) sifatida qabul qilinadi.

Misol: Sonlar yig'indisi

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

Oddiy argumentlar bilan birga ishlatish

*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")

🎮 Interaktiv Demo: *args bilan ishlash

Vergul bilan ajratilgan bir nechta son kiriting va ularning yig'indisini hisoblang.

🏷️**kwargs bilan ishlash

**kwargs funksiyaga o‘zgaruvchan miqdordagi nomlangan (kalit so'zli) argumentlar uzatish imkonini beradi. Funksiya ichida bu argumentlar dictionary (lug'at) sifatida qabul qilinadi.

Misol: Foydalanuvchi ma'lumotlari

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

Argumentlar ketma-ketligi

Oddiy, *args va **kwargs birga ishlatilganda, ularning qat'iy tartibi bor:

  1. Oddiy argumentlar (masalan, ism)
  2. *args
  3. **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")

🎮 Interaktiv Demo: **kwargs bilan ishlash

Foydalanuvchi ma'lumotlarini 'kalit=qiymat' formatida, vergul bilan ajratib kiriting.

🏋️Amaliy mashqlar

Endi o‘rganganlarimizni amalda sinab ko‘ramiz! Quyidagi mashqlarni bajaring.

Mashq 1: Default arguments

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

Mashq 2: *args

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")

Mashq 3: **kwargs

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"
)

🎉Xulosa va Uy Vazifasi

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.

📌 Asosiy xulosalar:

  • Default Arguments: Funksiyani chaqirishni osonlashtiradi, ba'zi argumentlarni ixtiyoriy qiladi.
  • *args: Noma'lum sondagi pozitsion argumentlarni tuple sifatida qabul qiladi.
  • **kwargs: Noma'lum sondagi nomlangan argumentlarni dictionary sifatida qabul qiladi.
  • Tartib: oddiy argumentlar → *args → **kwargs.

📚 Uyga vazifa

  1. ayirish(a, b=5) nomli funksiya yarating, u a dan b ni ayirib natijani chiqarsin. Funksiyani ayirish(10) va ayirish(15, 3) sifatida chaqiring.
  2. sonlar_kopaytmasi(*sonlar) nomli funksiya yarating, u barcha kiritilgan sonlarning ko‘paytmasini chiqarsin. (Maslahat: sikl ishlating).
  3. 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.

🤔Qayta ko'rib chiqish va Savollar

Ajoyib ish qildingiz! Endi o'rganganlarimizni mustahkamlab olamiz.

🧐 Default argumentlar qachon foydali?

Funksiyaning ba'zi parametrlari ko'p hollarda bir xil qiymatga ega bo'lganda, lekin ba'zida uni o'zgartirish kerak bo'lganda juda qulay.

🤨 `*args` nima maqsadda ishlatiladi?

Funksiyaga oldindan sanog'i noma'lum bo'lgan argumentlarni (masalan, yig'indini hisoblash uchun bir nechta son) uzatish uchun ishlatiladi.

🤓 `**kwargs` qanday ma'lumotlarni qabul qiladi?

Kalit so'z (nom) bilan berilgan argumentlarni qabul qiladi. Bu funksiyaga sozlamalar (configurations) yoki ixtiyoriy atributlarni uzatish uchun juda qulay.

💬 Savollaringiz bormi?

Qandaydir tushunmovchiliklar qoldimi? Hozir muhokama qilish uchun ayni vaqti. Bemalol savollaringizni bering! 😊