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
defbilan funksiya yaratish va uni chaqirish- Parametrlar, argumentlar va standart qiymatlar
return— natija qaytarish va uningprintdan 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:
- Takrorlanishni yo'qotadi. 8-darsdagi kabisa yili tekshiruvini uch marta yozgandik. Funksiya bilan uni bir marta yozib, uch marta chaqiramiz.
- Kodni tartibga soladi. Katta dastur kichik, tushunarli bo'laklarga ajraladi.
- Nom beradi.
kabisami(2024)uzun mantiqiy ifodadan ko'ra ancha tushunarli.
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.
defdan keyin funksiya nomi, qavslar va ikki nuqta yoziladi.- Funksiya tanasi — 4 bo'sh joy surilgan blok.
deffunksiyani faqat yaratadi, lekin bajarmaydi. Funksiya uni chaqirganda — nomi va qavslar yozilganda bajariladi:salomlash().
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
print()natijani ekranga ko'rsatadi — odam uchun. Dastur bu natijadan keyin foydalana olmaydi.returnnatijani dasturga qaytaradi — uni saqlash va keyingi hisoblarda ishlatish mumkin.
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?
functiondeffuncreturn
To'g'ri. def — define, ya'ni «aniqlash».
Quyidagi kod nima chiqaradi?
def f(x):
print(x * 2)
natija = f(5)
print(natija)
10va10- Faqat
10 10vaNone- 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?
1057- Xato beradi: argument yetishmaydi
To'g'ri. b berilmagani uchun standart qiymat — 2 olinadi.
return bajarilganda nima bo'ladi?
- Natija ekranga chiqadi
- Dastur butunlay to'xtaydi
- Funksiya boshidan qayta bajariladi
- 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.
returnnatijani dasturga qaytaradi,printesa faqat ekranga chiqaradi.returnsiz funksiyaNoneqaytaradi.- Funksiya ichidagi o'zgaruvchilar mahalliy — tashqarida ko'rinmaydi.
- Katta dasturlar kichik, bitta ishni bajaradigan funksiyalardan yig'iladi.