Barcha kurslar Yo'nalishlar Reyting Kirish Ro'yxatdan o'tish

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 ismparametr (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
print 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

  1. Bitta funksiya — bitta vazifa. "Hisoblaydi va chiqaradi va saqlaydi" — bu uchta funksiya.
  2. Nomi vazifasini aytsin: hisobla_yuza, tekshir_parol — fe'l bilan.
  3. Hisoblovchi funksiya print emas, return qilsin — shunda uni testlash ham (Kodni tekshirish bo'limi), qayta ishlatish ham oson.

Eslab qoling

  • def nom(parametrlar): — e'lon; chaqirilmaguncha ishlamaydi.
  • return qiymat qaytaradi va funksiyani tugatadi; qaytarmagan funksiya None beradi.
  • 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

  1. Ism qabul qilib tabrik matni qaytaradigan funksiya yozing; natijani o'zgaruvchiga olib, print tashqarida bo'lsin.
  2. yuza(a, b) funksiyasini yozing va uchta har xil o'lcham uchun natijalarini yig'indisini chiqaring.
  3. tekshir(parol) funksiyasi: uzunligi 8 dan kam bo'lsa "zaif", aks holda "yaxshi" qaytarsin — erta return ishlating.
  4. ortacha(*sonlar) — istalgancha son qabul qilib o'rtachasini qaytarsin; bo'sh chaqiruvda nima bo'lishini tekshirib, himoya qo'shing.
  5. Ro'yxatni funksiya ichida o'zgartirib tashqarida ko'rinishini ko'rsating; keyin [:] bilan himoyalangan variantini yozing.
  6. Ikkita funksiyangizni mening_modulim.py fayliga chiqarib, asosiy fayldan ikkala usulda import qiling.

Bo'lim testi funksiyalar mavzusini yakunlaydi.

Funksiyalar — konspekt

Funksiyalar Maqola

def, return, parametrlar, args/*kwargs va modullar — bir sahifada.

Eslatma yozish uchun saytga kiring.

Resurslar hozircha qo'shilmagan

O'qituvchi dars uchun qo'shimcha materiallarni qo'shganida shu yerda paydo bo'ladi.

Savol berish uchun saytga kiring.

Hozircha savollar yo'q

Bu dars yuzasidan birinchi savolni siz bering.