Python - Funksiyalar
Funksiya
Funksiya faqat chaqirilganda ishlaydigan kod blokidir.
Siz funksiyaga parametrlar deb ataladigan ma'lumotlarni uzatishingiz mumkin.
Funksiya natija sifatida ma'lumotlarni qaytarishi mumkin.
Funksiya Yaratish
Python'da funksiya def kalit so'zi yordamida aniqlanadi:
Misol
def mening_funksiyam():
print("Funksiyadan salom")Funksiyani Chaqirish
Funksiyani chaqirish uchun funksiya nomidan keyin qavslar ishlatiladi:
Misol
def mening_funksiyam():
print("Funksiyadan salom")
mening_funksiyam()Argumentlar
Funksiyalarga ma'lumotlar argumentlar sifatida uzatilishi mumkin.
Argumentlar funksiya nomidan keyin qavslar ichida ko'rsatiladi. Siz xohlagancha argument qo'shishingiz mumkin, faqat ularni vergul bilan ajrating.
Quyidagi misolda bir argumentli (ism) funksiya mavjud. Funksiya chaqirilganda, biz ismni uzatamiz va u funksiya ichida to'liq ismni chop etish uchun ishlatiladi:
Misol
def mening_funksiyam(ism):
print(ism + " Refsnes")
mening_funksiyam("Emil")
mening_funksiyam("Tobias")
mening_funksiyam("Linus")Argumentlar ko'pincha Python hujjatlarida args deb qisqartiriladi.
Parametrlar yoki Argumentlar?
Parametr va argument atamalari bir xil narsa uchun ishlatilishi mumkin: funksiyaga uzatiladigan ma'lumotlar.
Funksiya nuqtai nazaridan:
Parametrfunksiya ta'rifida qavslar ichida keltirilgan o'zgaruvchidir.Argumentfunksiya chaqirilganda unga yuboriladigan qiymatdir.
Argumentlar Soni
Odatiy holatda, funksiya to'g'ri argumentlar soni bilan chaqirilishi kerak. Ya'ni, agar funksiyangiz 2 ta argumentni kutsa, siz funksiyani 2 ta argument bilan chaqirishingiz kerak, na ko'p, na kam.
Misol
Bu funksiya 2 ta argumentni kutadi va 2 ta argument oladi:
def mening_funksiyam(ism, familiya):
print(ism + " " + familiya)
mening_funksiyam("Emil", "Refsnes")Agar funksiyani 1 yoki 3 ta argument bilan chaqirsangiz, xatolik olasiz:
Misol
Bu funksiya 2 ta argumentni kutadi, lekin faqat 1 tasini oladi:
def mening_funksiyam(ism, familiya):
print(ism + " " + familiya)
mening_funksiyam("Emil") # XatolikO'zboshimcha Argumentlar, *args
Agar funksiyangizga nechta argument uzatilishi noma'lum bo'lsa, parametr nomidan oldin * qo'shing.
Bu usulda funksiya argumentlar tupini oladi va ularga mos ravishda kirishi mumkin:
Misol
Argumentlar soni noma'lum bo'lsa, parametr nomidan oldin * qo'shing:
def mening_funksiyam(*bolalar):
print("Eng kichik bola " + bolalar[2])
mening_funksiyam("Emil", "Tobias", "Linus")O'zboshimcha Argumentlar ko'pincha Python hujjatlarida *args deb qisqartiriladi.
Kalit So'z Argumentlari
Argumentlarni kalit = qiymat sintaksisi bilan ham yuborishingiz mumkin.
Bu usulda argumentlar tartibi ahamiyatsiz bo'ladi.
Misol
def mening_funksiyam(bola3, bola2, bola1):
print("Eng kichik bola " + bola3)
mening_funksiyam(bola1="Emil", bola2="Tobias", bola3="Linus")Kalit So'z Argumentlari ko'pincha Python hujjatlarida kwargs deb qisqartiriladi.
O'zboshimcha Kalit So'z Argumentlari, **kwargs
Agar funksiyangizga nechta kalit so'z argumentlari uzatilishi noma'lum bo'lsa, parametr nomidan oldin ikkita yulduzcha ** qo'shing.
Bu usulda funksiya argumentlar lug'atini oladi va ularga mos ravishda kirishi mumkin:
Misol
Kalit so'z argumentlari soni noma'lum bo'lsa, parametr nomidan oldin ** qo'shing:
def mening_funksiyam(**bola):
print("Uning familiyasi " + bola["familiya"])
mening_funksiyam(ism="Tobias", familiya="Refsnes")O'zboshimcha Kalit So'z Argumentlari ko'pincha Python hujjatlarida **kwargs deb qisqartiriladi.
Standart Parametr Qiymati
Quyidagi misol standart parametr qiymatidan qanday foydalanishni ko'rsatadi.
Agar funksiyani argumentsiz chaqirsak, u standart qiymatni ishlatadi:
Misol
def mening_funksiyam(davlat="Norvegiya"):
print("Men " + davlat + "danman")
mening_funksiyam("Shvetsiya")
mening_funksiyam("Hindiston")
mening_funksiyam()
mening_funksiyam("Braziliya")Ro'yxatni Argument Sifatida Uzatish
Funksiyaga har qanday ma'lumot turi argumentini yuborishingiz mumkin (satr, raqam, ro'yxat, lug'at va hokazo), va u funksiya ichida xuddi shu ma'lumot turi sifatida qabul qilinadi.
Masalan, agar ro'yxatni argument sifatida yuborsangiz, u funksiyaga yetib kelganda ham ro'yxat bo'lib qoladi:
Misol
def mening_funksiyam(taomlar):
for x in taomlar:
print(x)
mevalar = ["olma", "banan", "gilos"]
mening_funksiyam(mevalar)Qiymatlarni Qaytarish
Funksiyaning qiymat qaytarishi uchun return iborasidan foydalaning:
Misol
def mening_funksiyam(x):
return 5 * x
print(mening_funksiyam(3))
print(mening_funksiyam(5))
print(mening_funksiyam(9))Pass Ibora
Funksiya ta'riflari bo'sh bo'la olmaydi, lekin agar biron sababga ko'ra ichida hech narsa bo'lmagan funksiya ta'rifi bo'lsa, xatolikni oldini olish uchun pass iborasini qo'ying.
Misol
def mening_funksiyam():
passFaqat Pozitsion Argumentlar
Siz funksiyaning faqat pozitsion argumentlar yoki faqat kalit so'z argumentlari ga ega bo'lishini belgilashingiz mumkin.
Funksiyaning faqat pozitsion argumentlarga ega bo'lishini ko'rsatish uchun argumentlardan keyin , / qo'shing:
Misol
def mening_funksiyam(x, /):
print(x)
mening_funksiyam(3), / bo'lmasa, funksiya pozitsion argumentlarni kutsa ham kalit so'z argumentlaridan foydalanishga ruxsat beriladi:
Misol
def mening_funksiyam(x):
print(x)
mening_funksiyam(x=3)Lekin , / qo'shilsa, kalit so'z argumentini yuborsangiz xatolik olasiz:
Misol
def mening_funksiyam(x, /):
print(x)
mening_funksiyam(x=3) # XatolikFaqat Kalit So'z Argumentlari
Funksiyaning faqat kalit so'z argumentlarga ega bo'lishini ko'rsatish uchun argumentlardan oldin *, qo'shing:
Misol
def mening_funksiyam(*, x):
print(x)
mening_funksiyam(x=3)*, bo'lmasa, funksiya kalit so'z argumentlarini kutsa ham pozitsion argumentlardan foydalanishga ruxsat beriladi:
Misol
def mening_funksiyam(x):
print(x)
mening_funksiyam(3)Lekin *, bilan pozitsion argument yuborsangiz xatolik olasiz:
Misol
def mening_funksiyam(*, x):
print(x)
mening_funksiyam(3) # XatolikPozitsion va Kalit So'z Argumentlarini Birlashtirish
Siz ikkala argument turini bir funksiyada birlashtirishingiz mumkin.
/ dan oldingi har qanday argument faqat pozitsion, *, dan keyingi har qanday argument faqat kalit so'zdir.
Misol
def mening_funksiyam(a, b, /, *, c, d):
print(a + b + c + d)
mening_funksiyam(5, 6, c=7, d=8)Rekursiya
Python shuningdek, funksiya rekursiyasini qabul qiladi, ya'ni aniqlangan funksiya o'zini o'zi chaqira oladi.
Rekursiya matematika va dasturlashda keng tarqalgan tushunchadir. Bu funksiyaning o'zini o'zi chaqirishi deganidir. Bu ma'lumotlarni aylanib natijaga erishish imkonini beradi.
Dasturchi rekursiya bilan juda ehtiyot bo'lishi kerak, chunki hech qachon tugamaydigan yoki juda ko'p xotira yoki protsessor quvvatini ishlatadigan funksiyani yozish oson bo'lishi mumkin. Ammo to'g'ri yozilganda rekursiya juda samarali va matematik jihatdan nafis dasturlash yondashuvi bo'lishi mumkin.
Bu misolda uchburchak_rekursiya() o'zini o'zi chaqiradigan ("rekursiv") funksiyadir. Biz k o'zgaruvchisini ma'lumot sifatida ishlatamiz, u har rekursiyada 1 ga kamayadi. Rekursiya shart 0 dan katta bo'lmaganda (ya'ni 0 bo'lganda) tugaydi.
Yangi dasturchi uchun buni qanday ishlashini tushunish biroz vaqt olishi mumkin, buni sinab ko'rish va o'zgartirish orqali eng yaxshi aniqlash mumkin.
Misol
Rekursiya Misoli:
def uchburchak_rekursiya(k):
if k > 0:
natija = k + uchburchak_rekursiya(k - 1)
print(natija)
else:
natija = 0
return natija
print("Rekursiya Misol Natijalari:")
uchburchak_rekursiya(6)