Funksiyalar
Dasturlash tilida funksiyalar
Oldingi mavzularda biz bir qator funksiyalarni shunchaki ishlatib ketdik. Keling endi ular bilan batafsil tanishsakda, keyin boshqa zarur funksiyalardan bir nechtasini o’rganib chiqsak.
Funksiya - deb dasturlash tillarida dasturning ma’lum bir bo’lagiga aytiladi va biz undan dasturning asosiy qismida bir necha mart qayta-qayta chaqirib ishlatishimiz mumkin bo’ladi. Ya’ni bir marta ma’lum bir amal yoki amallar ketma-ketligini yozib qo’yib, undan takror ishlatishimiz mumkin bo’ladi. Bundan tashqari funksiyalar bir qancha qulayliklarni bizga taqdim etadi. Bular haqida ushbu kursda kamroq so’z yuritamiz, chunki kursimiz asosan Sun’iy Intellekt uchun. Odatda har bir dasturlash tili bir qator birlamchi funksiyalar to’plamini o’zida saqlaydi. Quyida biz ulardan zarurlarini o’rganamiz.
Funksiyalarni chaqirish uchun quyidagi sinkasisdan foydalanamiz: <funksiya nomi>(<funskiya parameterlari>)
- ya’ni birinchi bizga zarur bo’lgan funksiya nomini yozib, keyin qavs ichiga shu funksiyani ishlatish uchun zarur bo’lgan parameter yoki parameterlar vergul bilan yozib chiqiladi. Keling print
funskiyasining ishlatilishini ber eslaylik:
[1]:
age = 14
fam = "Abdusamatov"
ism = 'Doniyor'
vazn = 78.5
print(fam, ism, age, vazn)
Abdusamatov Doniyor 14 78.5
Yuqoridagi dastur matnida biz print
nomli funksiya chaqirdik va uning parameterlariga 4 to’rta o’zgaruvchini uzatdik. Natijada esa bu funskiya uzatilgan parameterlarni chop qildi. Quyida ushbu funksiyalar bilan batafsil tanishib chiqamiz.
Biz shu vaqtgacha faqat ikkita funksiya bilan tanishdik. Shunda ham, faqat ular bilan qisman ishlashni o’rgandik. Shuning uchun ushbu bo’limda, funksiyaning qiymat qaytarishini va ularning natijalarini boshqa o’zgaruvchi saqlab, keyinchalik ulardan foydalanishni o’rganamiz. Python dasturlash tilida har bir funksiya qiymat qaytaradi. Lekin, odatada, dasturlash tillarida biz funksiyalar qiymat qaytarishi yoki qaytarmasligiga qarab ikki turga ajratamiz. Pythonda esa bu holat faqat None
o’zgarmas qiymati bilan amalga oshiriladi, ya’ni shunchaki None
qiymatini qaytaradi agar oshkor ravishda qiymat qaytarish buyrug’i berilmagan bo’lsa. Bu kabi ma’lumotlar bilan keyinchalik foydalanuvchi tomonidan aniqlangan funksiyalar mavzusida tanishamiz.
Hozir keling bu qismlarga chuqur kirishmasdan, uning o’rniga, sodda misollar bilan mavzuni tushunaylik. Bu kabi holatlarni esa kelgusida ko’rib chiqaylik. Keling type
funksiyasi qaytargan qiymatni, biror o’zgaruvchiga yozaylikda, keyin uni print
funksiyasi yordamida chop qilaylik quyidagi kodda berilgan kabi.
[2]:
# age o'zgaruvchisiga 25 yozish
age = 25
# age o'zgaruvchisi turini olish
age_type = type(age)
# va natijani chop qilish
print(age_type)
<class 'int'>
print
funksiyasi
Ushbu bo’limda biz print
funksiyasi bilan batafsil tanishishga harakat qilamiz. Chunki biz ushbu funksiyadan ushbu kitob davomida juda ko’p o’rinlarda foydalanimiz. Ushbu funksiya 5 qiymat (argument deb ham nomlaymiz) qabul qiladi, ular: 1. *values
- ushbu argumentga biz chop qilmoqchi bo’lgan qiymatlarimizni beramiz, masalan:
[3]:
age = 14
fam = "Abdusamatov"
ism = 'Doniyor'
vazn = 78.5input('Yoshi kiriting: ')
# chop etish
print(fam, ism, age, vazn)
Abdusamatov Doniyor 14 78.5
Ushbu argument bir nechta qiymatlarni o’z ichiga oladi. Yuqoridagi kodga e’tibor bersak, undagi 4 ta qiymat ham ushbu argumentga tegishli, shuning uchun ham argumentda (*values
) *
belgisi bor. Bu kabi tafsilotlarni keyinchalik o’rni kelgandi o’rganamiz.
sep
- bu satr (matn) turida qiymat qabul qilib,*values
argumentidagi qiymatlarni o’rtasiga ajratuvchi sifatida yoziladi. Shuning uchun ham uning nomisep
ya’niseparator
ning qisqartmasi. Quyidagi misolni diqqat bilan o’rganing.
[4]:
age = 14
fam = "Abdusamatov"
ism = 'Doniyor'
vazn = 78.5
# turli xil chop etishlar
# ajratuvchi sifatida ustun '|' belgisidan foydalanimiz
print(fam, ism, age, vazn, sep='|')
# ajratuvchi sifatida ustun '|' belgisidan foydalanimiz
# va orasiga bo'sh joy ham qo'shamiz
print(fam, ism, age, vazn, sep=' | ')
Abdusamatov|Doniyor|14|78.5
Abdusamatov | Doniyor | 14 | 78.5
Ushbu kodni diqqat bilan kuzatsak, eng farqli bo’lgan tomoni aniqlashmiz mumkin, bu esa biz kodda sep='|'
kodni ishlatishimiz. Biz birinchi 4 ta qiymatni (fam
, ism
, age
, vazn
) ketma-ket vergul bilan ajratib yozdik va bular jamoa bo’lib *values
ga tegishli bo’ldi. Lekin sep
agrumentiga kelganda esa, biz unining nomni berdik, bu kabi funksiya argumentining nomni yozish oshkor ko’rinishda argumentga qiymat berish deb nomlanadi hamda bu shunday qilmasak xatolik ro’y
beradi. Bu kabi xatolar nega chiqishi va nega yana shu kabi ko’rinishda foydalanishimiz zarur ekanligini vaqti kelib o’rganamiz.
end
- bu argumentprint
funksiyasi ishlagandan keyin qanday qiymat qo’yishni aniqlaydi, odatda keyingi qatorga tushish qiymat sifatida turadi. Yuqoridagi kodga e’tibor bersak, unda ikki chop qilishimiz (print
fuknisyasini birinchi va ikkinchi marta chaqirgan qism) natijalari alohida ikki qatorga yozilgan. Keling bir tekshirib ko’ramiz.
[5]:
# Yoshi 14
age = 14
fam = "Abdusamatov"
ism = 'Doniyor'
vazn = 78.5
# ushbu koddan keyin albatta keygi chop qilish natijalari yangi qatordan yoziladi
print(fam, ism, age, vazn, sep='|')
# Bunda keyingi chop qilish bilan buning o'rtasida faqat bo'sh joy bo'ladi
print(fam, ism, age, vazn, sep=' | ', end=' ')
# orada bo'sh joy bor
print(fam, ism, age, vazn, sep=' | ', end=' ')
Abdusamatov|Doniyor|14|78.5
Abdusamatov | Doniyor | 14 | 78.5 Abdusamatov | Doniyor | 14 | 78.5
Yuqoridagi kod bizga end
argumentiga qiymat bermasak natijada keyingi chop qilishlar yangi qatordan boshlanishini ko’rdik. Ushbu funksiyaning boshqa yana 2 ta argumenti bo’lib, biz ularni keyinchalik mustaqil o’rganishga qoldiramiz.
input
funksiyasi
Ushbu funksiyani bir qator funksiyalarda ishlatib ulgirdik. Bu funksiya foydalanuvchiga qiymat kiritish uchun maydon hosil qiladi va uni kiritishini kutib, kiritilgan qiymatni uni chaqirgan joyiga qaytaradi. Ushbu qaytariluvchi qiymatning turi hard doim matn str
bo’ladi. Agar biz uni boshqa turlarga o’tkazmoqchi bo’lsak, biz shu turning funksiyasini chaqirishimiz zarur bo’ladi. Ushbu funksiya faqat bitta qiymat qabul qilib, foydalanuvchiga qanday qiymat kiritish haqida qo’shimcha xabar chop
qiladi va bu parameter har doim str
turida bo’lishi zarur. Quyida bir qator misollarni qarab chiqamiz.
[1]:
age = int(input('Yoshi kiriting: '))
print(age)
34
Yuqoridagi kodda biz input
funksiyasini to’g’ridan-to’g’iri int
funskiyasi parameteri sifatida ishlatayabmiz. Bunday ichma-ich joylashishlar dastur natijasiga ta’sir qilmaydi. Quyida shu kodning sal boshqacharoq, ya’ni input
alohida yozilgan ko’rinishi qaraymiz.
[2]:
# 1-chi yoshni satr ko'rinishida
# input funksiyasidan yuklab olamiz.
age_str = input('Yoshi kiriting: ')
# o'zgaruvchi nomidagi str boshqa bo'lishi ham mumkin
age = int(age_str)
print(age)
34
Turlarni o’zgartirish funksiyalari
Biz asosan shu vaqtgacha o’rgangan turlarimiz ustida bunday funksiyalarni ishlatib ko’ramiz. Odatda ular bir-birdan katta farq qilmaydi.
int
- funksiyasi ham o’zgaruvchi turi ham funksiya hisoblanib [1], agar biz uni funksiya sifatida chaqirib parameteriga joiz qiymatni kiritsak unda u bizga qiymatniint
butun son ko’rinishidagisini qaytaradi. Oldingi kodda bunga sodda misol ko’rdik. Ushbu funksiya yana bitta qo’shimchabase
parameterga ega bo’lib, u parameter kiritilayotgan qiymatning qaysi sanoq sistemasidagi ekanligini bildirish uchun ishlatiladi. Quyida unga sodda misol qilib, ikkilik sanoq sistemasidagi berilgan matnniint
turiga [2] o’tkazamiz.
[4]:
# bu 4 sonidir
a_2 = '0b100'
a = int(a_2, base=2)
print(a)
4
Yuqorida biz 0b100
matnini 10 lik sanoq sistemasiga o’tkazdik va uning qiymati 4 bo’ldi. Ushbu satr boshidagi 0b
(nol va b harfi) ushbu soning ikkilik sanoq sistemasidagi ekanligini bildir edi.
float
- funskiyasi ham o’zgaruvchi turi ham funksiya hisoblanib, agar biz uni funksiya sifatida chaqirib joiz parameteriga qiymat berishimiz zarur. Masalan, quyidastr
danfloat
turiga o’tish keltirilgan.
[1]:
weight = float(input("Vazningizni kiriting: "))
print('Sizning vazningiz: ', weight)
Sizning vazningiz: 67.8
Agar biz .
o’rniga boshqa belgi, masalan, ,
ishlatsak xatolik beradi.
[2]:
weight = float(input("Vazningizni kiriting: "))
print('Sizning vazningiz: ', weight)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[2], line 1
----> 1 weight = float(input("Vazningizni kiriting: "))
2 print('Sizning vazningiz: ', weight)
ValueError: could not convert string to float: '67,8'
Undan tashqari soning exponenta ko’rinishi orqali ham str
turida berish mumkin. Masalan, yuqoridagi misolda 678e-1
ni kiritsak ham bir xil natija olamiz. Bundan tashqari butun sonlarni ham haqiqiy songa yoki haqiqiy sonlarni butun sonlarga o’tkazish mumkin mos funskiyalardan foydalangan holda. Namuna uchun:
[4]:
# inson vazn
weight = int('678e-1')
print(weight)
# inson bo'yi
height = float(178)
print(height)
67
178.0
Natijalardagi asosiy farq bu chop qilishda ochiq ko’rinadi, ya’ni 67.8
haqiqiy sonini int
turiga o’tkazish uning haqiqiy qismini olib tashlaydi. int
turidagi 178
soni float
ga o’tkazish esa unga chop qilgan haqiqiy qism qo’shishidir, lekin saqlashda ham xotiradan boshqacha joy ajratiladi.
Ko’p ishlatiladigan Python funksiyalari
Quyida biz bir nechta yuqoridagi funksiyalarga o’xshash funksiyalarni jadvalda qisqacha ta’rifi bilan keltirdik. Bu kabi funksiyalar ko’p bo’lgani uchun o’tilgan mavzugacha bo’lgan funksiyalarni keltiramiz, qoganlari mavzularni tushuntirish asnosida o’rganib boriladi.
Funksiya |
Tasnifi |
---|---|
|
Berilgan parameterni musbat songa o’tkazadi. Odatda biz bu narsani absolyut qiymat deb nomlaymiz. |
|
Qiymatni ikkilik sonoq sistemasiga o’tkazadi. |
|
Qiymatni mantiqiy turga o’tkazadi. |
|
|
|
|
|
Obyektning (o’zgaruvchining) idsini qaytaradi. |
|
Haqiqiy soni berilgan aniqlikgacha yaxlitlaydi. |
|
Berilgan soni ko’rsatilgan darajaga ko’taradi. Masalan, |