Funksiyalar

Biz allaqachon ko'p funksiyalardan foydalandik: print(), len(), input(), round(). Endi o'z funksiyalarimizni yaratamiz. Bu — oddiy skriptlardan haqiqiy dasturlarga o'tishdagi eng muhim qadam.

Bu darsda

  • Funksiya nima va u nima uchun kerak
  • def bilan funksiya yaratish va uni chaqirish
  • Parametrlar, argumentlar va standart qiymatlar
  • return — natija qaytarish va uning print dan farqi
  • Mahalliy o'zgaruvchilar

Funksiya — nomlangan kod bo'lagi

Sharbat mashinasini tasavvur qiling. Uning ichida nima bo'layotganini bilish shart emas: olma solasiz — olma sharbati chiqadi, sabzi solasiz — sabzi sharbati. Mashina bir marta yasalgan, lekin uni istalgancha ishlatish mumkin.

Funksiya ham shunday: unga ma'lumot berasiz (yoki bermaysiz), u o'z ishini qiladi va natija qaytaradi (yoki qaytarmaydi). Bir marta yoziladi — ko'p marta ishlatiladi.

Funksiyalar uchta muammoni hal qiladi:

Funksiya yaratish: def

Funksiya def (inglizcha define — «aniqlash») kalit so'zi bilan yaratiladi:

def salomlash():
    print("Assalomu alaykum!")
    print("Darsimizga xush kelibsiz.")

salomlash()
salomlash()
Assalomu alaykum!
Darsimizga xush kelibsiz.
Assalomu alaykum!
Darsimizga xush kelibsiz.

Funksiyani chaqirishdan oldin yaratish kerak. def qatorlari odatda dasturning yuqori qismida turadi.

Parametrlar: funksiyaga ma'lumot berish

Funksiya qavslari ichida parametrlar — funksiya qabul qiladigan qiymatlar uchun nomlar yoziladi:

def salomlash(ism):
    print(f"Assalomu alaykum, {ism}!")

salomlash("Aziz")
salomlash("Dilnoza")
Assalomu alaykum, Aziz!
Assalomu alaykum, Dilnoza!

Funksiya chaqirilganda berilgan aniq qiymat ("Aziz") argument deyiladi. Chaqirilish paytida argument parametrga beriladi: birinchi chaqiruvda ism = "Aziz", ikkinchisida ism = "Dilnoza".

Bir nechta parametr

Parametrlar vergul bilan ajratiladi. Argumentlar ular bilan tartib bo'yicha moslashtiriladi:

def tanishtir(ism, shahar, yosh):
    print(f"{ism}, {yosh} yosh, {shahar}")

tanishtir("Jasur", "Namangan", 22)
tanishtir(shahar="Xiva", yosh=30, ism="Gulnora")

Ikkinchi chaqiruvda argumentlar nomi bilan berildi — bunda tartib muhim emas. Bu usul parametrlar ko'p bo'lganda kodni tushunarliroq qiladi.

Standart qiymatlar

Parametrga standart qiymat berish mumkin. Argument berilmasa, shu qiymat ishlatiladi:

def choy_buyurtma(soni, turi="ko'k choy"):
    print(f"{soni} choynak {turi}")

choy_buyurtma(2)
choy_buyurtma(1, "qora choy")
2 choynak ko'k choy
1 choynak qora choy

return — natija qaytarish

Hozirgacha funksiyalarimiz natijani ekranga chiqardi. Lekin ko'pincha funksiya natijani qaytarishi kerak — shunda uni o'zgaruvchiga saqlash, boshqa hisobda ishlatish mumkin bo'ladi. Buning uchun return ishlatiladi:

def kvadrat(x):
    return x * x

natija = kvadrat(7)
print(natija)
print(kvadrat(3) + kvadrat(4))
49
25

kvadrat(3) + kvadrat(4) qatorida Python avval ikkala funksiyani chaqiradi, ular 9 va 16 qaytaradi, keyin esa ular qo'shiladi. Funksiya chaqiruvini xuddi qiymatdek ishlatish mumkin — len("salom") kabi.

return va print — farqi nimada?

Bu yangi boshlovchilar eng ko'p adashadigan joy. Ikki funksiyani solishtiring:

def chiqaruvchi(a, b):
    print(a + b)

def qaytaruvchi(a, b):
    return a + b

x = chiqaruvchi(2, 3)
y = qaytaruvchi(2, 3)
print("x =", x)
print("y =", y)
5
x = None
y = 5

return bo'lmagan funksiya None — «hech narsa» qaytaradi. Shuning uchun x ga None yozildi.

Odatiy qoida: hisoblaydigan funksiyalar natijani return qilsin, natijani ekranga chiqarishni esa funksiyani chaqirgan joyga qoldiring. Shunda funksiyadan har xil vaziyatda foydalanish mumkin bo'ladi.

return funksiyani to'xtatadi

return bajarilishi bilan funksiya darhol tugaydi. Bu shartlar bilan juda qulay — 9-darsdagi baho qo'yish dasturini funksiyaga aylantiramiz:

def baho(ball):
    if ball >= 86:
        return 5
    if ball >= 71:
        return 4
    if ball >= 56:
        return 3
    return 2

for b in [95, 78, 60, 40]:
    print(f"{b} ball → {baho(b)}")

Bu yerda elif kerak emas: birinchi mos return funksiyani tugatadi, keyingi qatorlar bajarilmaydi.

Bir nechta qiymat qaytarish

Funksiya bir nechta qiymatni vergul bilan qaytarishi mumkin — aslida u kortej qaytaradi (13-dars), uni darhol ochib olamiz:

def statistika(sonlar):
    return min(sonlar), max(sonlar), sum(sonlar) / len(sonlar)

eng_kichik, eng_katta, ortacha = statistika([4, 8, 15, 16, 23, 42])
print("Eng kichik:", eng_kichik)
print("Eng katta:", eng_katta)
print("O'rtacha:", ortacha)

Mahalliy o'zgaruvchilar

Funksiya ichida yaratilgan o'zgaruvchilar (parametrlar ham) faqat shu funksiya ichida mavjud. Ular mahalliy (inglizcha local) o'zgaruvchilar deyiladi:

def hisobla():
    natija = 10 * 2
    return natija

hisobla()
print(natija)

NameError: funksiya tugashi bilan uning ichidagi natija o'zgaruvchisi yo'qoladi. Natija kerak bo'lsa, uni qaytarib, tashqarida saqlab oling: natija = hisobla().

Funksiya — alohida xona. Xona ichida qilingan yozuvlar (mahalliy o'zgaruvchilar) xonadan chiqib ketganda o'sha yerda qoladi. Tashqariga faqat eshikdan berib yuborilgan narsa (return) chiqadi.

Funksiyani hujjatlash

Funksiya nima qilishini uning birinchi qatoridagi uchtalik qo'shtirnoq ichida yozish odat tusiga kirgan. Bu hujjat satri (inglizcha docstring) deyiladi:

def kabisami(yil):
    """Yil kabisa yili bo'lsa True, aks holda False qaytaradi."""
    return (yil % 4 == 0 and yil % 100 != 0) or yil % 400 == 0

for yil in [2024, 1900, 2000, 2026]:
    print(yil, kabisami(yil))

11-darsda uch marta yozgan uzun ifodamiz endi bitta tushunarli nom ostida yashiringan. Funksiyalarning kuchi aynan shunda!

Funksiyalardan dastur yig'ish

Katta dasturlar kichik funksiyalardan yig'iladi. Har bir funksiya bitta ishni yaxshi bajaradi:

def maydon(eni, boyi):
    return eni * boyi

def kafel_soni(xona_maydoni, kafel_tomoni=0.3):
    bitta_kafel = kafel_tomoni * kafel_tomoni
    return round(xona_maydoni / bitta_kafel * 1.1)   # 10% zaxira bilan

def narx(soni, bittasi=8500):
    return soni * bittasi

m = maydon(4, 3.5)
k = kafel_soni(m)
print(f"Xona maydoni: {m} kv. m")
print(f"Kerakli kafel: {k} dona")
print(f"Taxminiy narx: {narx(k):,} so'm")

Mashqlar

1-mashq Juftmi?

juftmi(n) funksiyasini yozing: son juft bo'lsa True, aks holda False qaytarsin. Pastdagi ikki qator True va False chiqarishi kerak.

def juftmi(n):
    pass   # shu qatorni o'zgartiring

print(juftmi(4))
print(juftmi(7))
Yechimni ko'rish
def juftmi(n):
    return n % 2 == 0

print(juftmi(4))
print(juftmi(7))

pass — «hech narsa qilma» degan buyruq. U blok bo'sh qolmasligi uchun vaqtincha qo'yiladi.

2-mashq Uchtadan kattasi

max() dan foydalanmasdan maksimum(a, b, c) funksiyasini yozing.

def maksimum(a, b, c):
    pass

print(maksimum(3, 9, 5))
print(maksimum(-4, -1, -7))
Yechimni ko'rish
def maksimum(a, b, c):
    eng_katta = a
    if b > eng_katta:
        eng_katta = b
    if c > eng_katta:
        eng_katta = c
    return eng_katta

print(maksimum(3, 9, 5))
print(maksimum(-4, -1, -7))

3-mashq Soliq bilan narx

soliq_bilan(narx, foiz=12) funksiyasini yozing: u narxga foizni qo'shib, natijani butun songacha yaxlitlab qaytarsin. Foiz berilmasa, 12 foiz olinsin.

def soliq_bilan(narx, foiz=12):
    pass

print(soliq_bilan(100000))
print(soliq_bilan(100000, 15))
Yechimni ko'rish
def soliq_bilan(narx, foiz=12):
    return round(narx * (100 + foiz) / 100)

print(soliq_bilan(100000))
print(soliq_bilan(100000, 15))

4-mashq Harorat jadvali

farengeyt(c) funksiyasini yozing (F = C × 9 / 5 + 32) va u yordamida 0, 10, 20, 30, 40 °C uchun jadval chiqaring.

0 °C = 32.0 °F
10 °C = 50.0 °F
20 °C = 68.0 °F
30 °C = 86.0 °F
40 °C = 104.0 °F
# Kodingizni shu yerga yozing
Yechimni ko'rish
def farengeyt(c):
    return c * 9 / 5 + 32

for c in range(0, 41, 10):
    print(f"{c} °C = {farengeyt(c)} °F")

5-mashq So'zlar soni

sozlar_soni(matn) funksiyasi matndagi so'zlar sonini qaytarsin.

def sozlar_soni(matn):
    pass

print(sozlar_soni("Bugun biz Python funksiyalarini o'rganyapmiz"))
print(sozlar_soni(""))
Yechimni ko'rish
def sozlar_soni(matn):
    return len(matn.split())

print(sozlar_soni("Bugun biz Python funksiyalarini o'rganyapmiz"))
print(sozlar_soni(""))

O'zingizni sinang

Funksiya qaysi kalit so'z bilan yaratiladi?

  1. function
  2. def
  3. func
  4. return

To'g'ri. def — define, ya'ni «aniqlash».

Quyidagi kod nima chiqaradi?

def f(x):
    print(x * 2)

natija = f(5)
print(natija)
  1. 10 va 10
  2. Faqat 10
  3. 10 va None
  4. Xato beradi

To'g'ri. Funksiya 10 ni ekranga chiqaradi, lekin hech narsa qaytarmaydi — shuning uchun natija ga None yoziladi.

def kop(a, b=2): return a * b bo'lsa, kop(5) nimaga teng?

  1. 10
  2. 5
  3. 7
  4. Xato beradi: argument yetishmaydi

To'g'ri. b berilmagani uchun standart qiymat — 2 olinadi.

return bajarilganda nima bo'ladi?

  1. Natija ekranga chiqadi
  2. Dastur butunlay to'xtaydi
  3. Funksiya boshidan qayta bajariladi
  4. Funksiya tugaydi va qiymatni chaqirgan joyga qaytaradi

To'g'ri. return dan keyingi qatorlar bajarilmaydi.

Xulosa

  • Funksiya — nomlangan, qayta ishlatiladigan kod bo'lagi: def nom(parametrlar):.
  • Funksiya chaqirilgandagina bajariladi: nom(argumentlar).
  • Parametrlarga standart qiymat berish mumkin; argumentlarni nomi bilan ham berish mumkin.
  • return natijani dasturga qaytaradi, print esa faqat ekranga chiqaradi. return siz funksiya None qaytaradi.
  • Funksiya ichidagi o'zgaruvchilar mahalliy — tashqarida ko'rinmaydi.
  • Katta dasturlar kichik, bitta ishni bajaradigan funksiyalardan yig'iladi.