Bu bo'lim kursning markaziy mavzularidan biriga bag'ishlandi — funksiyalar: e'lon qilish, qiymat qaytarish, ro'yxat uzatishning nozik jihati, moslashuvchan parametrlar va kodni modullarga ajratish.
Funksiya nima uchun kerak
Bir xil kod uch joyda takrorlansa, uni uch joyda tuzatishga to'g'ri keladi — va bittasini unutasiz. Funksiya takrorlanadigan kodga nom beradi: bir marta yoziladi, istalgancha chaqiriladi.
def salomlash(ism):
print(f"Assalomu alaykum, {ism}!")
salomlash("Ali")
salomlash("Vali")
salomlash("Olim")
Natija:
Assalomu alaykum, Ali!
Assalomu alaykum, Vali!
Assalomu alaykum, Olim!
Atamalar: e'londagi ism — parametr (qabul qiladigan "joy"), chaqiruvdagi "Ali" — argument (yuborilgan qiymat).
Tipik xato — funksiyani e'lon qilib, chaqirishni unutish: def bloki o'z-o'zidan ishlamaydi. Dastur "hech narsa qilmayapti" bo'lsa, avval chaqiruv bor-yo'qligini tekshiring.
return — qiymat qaytarish
print natijani faqat ko'rsatadi; return esa uni dasturga qaytaradi — o'zgaruvchiga olish, boshqa hisobda ishlatish mumkin bo'ladi:
def kvadrat(x):
return x * x
a = kvadrat(5) # natija o'zgaruvchiga olindi
print(a)
print(kvadrat(3) + kvadrat(4)) # natijalar hisobda qatnashdi
Natija:
25
34
| return | ||
|---|---|---|
| Vazifasi | Ekranga chiqarish | Qiymatni chaqirgan joyga berish |
| Natijani saqlash | Yo'q | O'zgaruvchiga olinadi |
| Funksiyaga ta'siri | Davom etadi | Shu yerda tugaydi |
returndan keyingi qatorlar bajarilmaydi — bundan "erta chiqish" sifatida foydalaniladi:
def tekshir(yosh):
if yosh < 0:
return "Xato: yosh manfiy bo'lmaydi"
return f"Qabul qilindi: {yosh}"
print(tekshir(-5))
print(tekshir(25))
Natija:
Xato: yosh manfiy bo'lmaydi
Qabul qilindi: 25
Tipik xato — return o'rniga print yozib, natijani ishlatmoqchi bo'lish:
def qosh(a, b):
print(a + b)
natija = qosh(2, 3)
print(natija)
Natija:
5
None
Funksiya hech narsa qaytarmasa, Python o'zi None qaytaradi — natijada ana shu turibdi. Qoida: hisoblaydigan funksiya return qilsin, chiqarish esa chaqiruvchi tomonda bo'lsin.
Funksiyaga ro'yxat uzatish
Son yoki matn funksiyaga qiymat sifatida boradi, ro'yxat esa — o'zi (nusxasi emas). Funksiya ichidagi o'zgarish tashqarida ham ko'rinadi:
def birinchisini_ochir(royxat):
royxat.pop(0)
mevalar = ["olma", "nok", "uzum"]
birinchisini_ochir(mevalar)
print(mevalar)
Natija:
['nok', 'uzum']
Bu ba'zan ayni kerakli xatti-harakat, ba'zan esa yashirin xato manbai. Original saqlanishi kerak bo'lsa, nusxasini uzating:
birinchisini_ochir(mevalar[:]) # [:] — ro'yxat nusxasi
print(mevalar) # asl ro'yxat o'zgarmadi
Natija:
['nok', 'uzum']
Moslashuvchan parametrlar
Standart qiymatli parametr — argument berilmasa o'zi ishlaydigan qiymat:
def buyurtma(taom, soni=1):
print(soni, "ta", taom)
buyurtma("osh") # soni berilmadi — 1 ishlatildi
buyurtma("somsa", 5)
buyurtma(taom="manti", soni=3) # nomlab berish ham mumkin
Natija:
1 ta osh
5 ta somsa
3 ta manti
Standart qiymatlilar majburiy parametrlardan keyin yoziladi: def f(soni=1, taom) — SyntaxError.
*args — oldindan noma'lum sondagi pozitsion argumentlar; funksiya ichida tuple bo'lib keladi:
def yigindi(*sonlar):
return sum(sonlar)
print(yigindi(1, 2))
print(yigindi(1, 2, 3, 4, 5))
Natija:
3
15
**kwargs — noma'lum sondagi nomlangan argumentlar; lug'at bo'lib keladi:
def profil(**malumot):
for kalit, qiymat in malumot.items():
print(f"{kalit}: {qiymat}")
profil(ism="Ali", shahar="Toshkent", yosh=25)
Natija:
ism: Ali
shahar: Toshkent
yosh: 25
Modullar — funksiyalarni alohida faylda saqlash
Dastur o'sganda funksiyalar mavzu bo'yicha alohida fayllarga (modullarga) chiqariladi:
# hisob.py faylida:
# def qosh(a, b):
# return a + b
import hisob # 1-usul: modul nomi bilan
print(hisob.qosh(2, 3))
from hisob import qosh # 2-usul: to'g'ridan-to'g'ri
print(qosh(10, 20))
Natija:
5
30
Shu mexanizm bilan Python'ning tayyor modullari ham ulanadi (import random) — Kutubxonalar bo'limida davom etadi.
Toza funksiya qoidalari
- Bitta funksiya — bitta vazifa. "Hisoblaydi va chiqaradi va saqlaydi" — bu uchta funksiya.
- Nomi vazifasini aytsin:
hisobla_yuza,tekshir_parol— fe'l bilan. - Hisoblovchi funksiya
printemas,returnqilsin — shunda uni testlash ham (Kodni tekshirish bo'limi), qayta ishlatish ham oson.
Eslab qoling
def nom(parametrlar):— e'lon; chaqirilmaguncha ishlamaydi.returnqiymat qaytaradi va funksiyani tugatadi; qaytarmagan funksiyaNoneberadi.- Ro'yxat funksiyaga "o'zi" boradi; himoya kerak bo'lsa
royxat[:]nusxasini uzating. soni=1— standart qiymat;*args— tuple,**kwargs— lug'at.import modul/from modul import funksiya— kodni fayllarga ajratish yo'li.
Amaliyot
- Ism qabul qilib tabrik matni qaytaradigan funksiya yozing; natijani o'zgaruvchiga olib,
printtashqarida bo'lsin. yuza(a, b)funksiyasini yozing va uchta har xil o'lcham uchun natijalarini yig'indisini chiqaring.tekshir(parol)funksiyasi: uzunligi 8 dan kam bo'lsa "zaif", aks holda "yaxshi" qaytarsin — ertareturnishlating.ortacha(*sonlar)— istalgancha son qabul qilib o'rtachasini qaytarsin; bo'sh chaqiruvda nima bo'lishini tekshirib, himoya qo'shing.- Ro'yxatni funksiya ichida o'zgartirib tashqarida ko'rinishini ko'rsating; keyin
[:]bilan himoyalangan variantini yozing. - Ikkita funksiyangizni
mening_modulim.pyfayliga chiqarib, asosiy fayldan ikkala usulda import qiling.
Bo'lim testi funksiyalar mavzusini yakunlaydi.