O'zbek tilida
def func(language):
print(f'I love {language.title()}!')
language = "c++"
func(language)
>>> I love C++!
Yuqoridagi misolda func nomli funksiya yaratdik va biror bir qiymatni o’zida qabul qiladigan o’zgaruvchini ham funksiyaning qavslari orasida yaratib ketdik. Va biz bu funksiya chaqirganimizda bu o’zgaruvchi (language) orqali funksiyamizga qiymat uzatamiz. Va bu o’zgaruvchimiz yani language funksiyamizning parametri deb aytiladi va bu parameter qabul qiladigan qiymatlar (yuqoridagi misolda ‘python’ yoki ‘c++’) argumentlar bo’ladi. Argument bu funksiya chaqirilganda unga uzatiladigan ma’lumotga aytiladi. Biz qachonki funksiyani chaqirib unga argumentni berganimizda funksiya bu argumentni qabul qiladi va o’zining parametriga o’zlashtiradi. Yuqoridagi misolimizda biz funksiyamizni (func) chaqirdik va unga python argumentni uzatdik va func funksiyasi argumentni qabul qilib uni language parametriga o’zlashtirib oldi. Yani func funksiyasining language parametrining qiymati python so’ziga ega bo’ldi.
ESLATMA**: Ko’pchilik argument va parameterlarni bir birining o’rnini almashtirib atashadi. Agar funksiya yaratilayotganda o’zgaruvchini argument yoki funksiyani chaqirganda o’zgaruvchini parameter deb atashganini ko’rganingizda hayron qolmang!
Funksiyani bir necha parameterlar bilan birga yarish mumkin va huddi shu kabi funksiyani chaqirganingizda ham bir necha argumentlarni uzatishingiz mumkin. Funksiyaga parameterlarni bir necha yo’llar bilan uzatish mumkin. Parameterlarning yaratilgan tartibi shakli bilan bir xil tartibda, yani positional arguments yo’li bilan yoki keyword arguments, yani har bir argumentni o’zgaruvchiga uning qiymatini o’zlashtirish orqali amalga oshiriladi. O’zgaruvchilar list yoki dictionary kabi turli o’zgaruvchilardan iborat bo’lishi mumkin. Keling, bularning har birini o’z navbatida ko’rib chiqaylik.
Funksiya chaqirilganda funksiyaning argumentlari funksiya yaratilgandagi parameterlarining tartibiga most tushishi kerak. Shu tarzda parameter va argumentlarning mos kelishi positional arguments deb ataladi.
Buning qanday ishlashini ko’rish uchun uy hayvonlari haqida ma’lumot chiqaradigan funksiyani ko’rib chiqamiz. Bu funksiyamiz har bir uy havonining ismini va u qanaqa hayvon ekanligi haqida ma’lumotni chop qilsin.
def describe_pet(animal_type, pet_name):
"""Display information about pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
def describe_pet('hamster', 'harry')
Yuqorida ko’rib turganingizdek yaratgan funksiyamiz animal_type, pet_name parameterlari bilan yaratildi. Biz bu funksiyamizni chaqirganimizda animal_type, pet_name parameterlar tartibiga most ravishda argumentlarni berdik (‘hamster’, ‘harry’). Funksiyaning tanasida bu ikki parameter uy hayvonimiz haqidagi ma’lumotlarni chiqarishda ishlatildi. Natija quydagicha bo’ladi:
I have a hamster.
My hamster's name is Harry.
Funksiyangizda pozitsion argumentlardan istaganingizcha foydalanishingiz mumkin. Funksiyangizni chaqirganingizda berilgan argumentlarning tartibiga qarab Python bu argumentlarni funksiyaning parameterlariga mos o’zlashtiradi.
Pozitsion argumentlardan foydalanganda chaqirilgan funksiyaning argumentlarini funksiyaning parameterlariga mos ravishda bermasangiz siz kutmagan natija yoki xatolik ro’y berishi mumkin. Keling quydagicha funksiya yaratib unga murojaat qilaylik
def describe_pet(animal_type, pet_name):
"""Display information about a pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet('harry', 'hamster')
Ko’rib turibsizki yuqoridagi misolda animal_type, pet_name parameterlarga ega funksiya yaratdek. Lekin funksiyani chaqirishda parameter animal_type o’rnida argumentimizni ‘harry’ va parameter pet_name o’rnida argumentimizni ‘hamster’ deb uzatdik. Yani uy hayvonining turi o’rniga ismni va ismining o’rniga uni turini uzatdik. Va natijamiz quydagicha bo’ldi:
I have a harry.
My harry's name is Hamster.
Agar siz shunaqa g’alati natijaga duch kelsangiz unda argumentlaringizning tartibi funksiyangizning parameterlariga mos kelish kelmasligini yana bir bor tekshirib ko’ring.
Keyword Arguments shaklda argumentlarni uzatish funksiya chaqirganda argumentlarning tartibi funksiya yaratilgandagi parameterlarning tartigibi mos kelishi talab etilmaydi. Faqat bunda funksiyaga uzatilayotgan argument o’ziga mos bo’lgan parameter nomi bilan bir xil o’zgaruvchiga o’zlashtirilgan holda uzatiladi. Shu tarzda argumentlarning tartibi parameterlarning tartibiga mos kelmasa ham uzatilayotgan argument funksiyaga tug’ri tartibda uzatiladi. Keling buni quydagi misolda ko’rib chiqamiz. Oldin describe_pet() nomi funksiya yarataylik. U animal_type, pet_name parameterlarga ega bo’lsin.
def describe_pet(animal_type, pet_name):
"""Display information about a pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
Bu funksiyani chaqirishda argumentlarni (animal_type=’hamster’, pet_name=’harry’) funksiya yaratilgan vaqtdagi parameterlar tartibiga mos ravishda beramiz.
describe_pet(animal_type='hamster', pet_name='harry')
I have a hamster.
My hamster's name is Harry.
Funksiyamizni ikkinchi marta chaqirganimizda argumentlarni (pet_name=’harry’, animal_type=’hamster’) funksiya yaratilgan vaqtdagi parameterlar tartibiga teskari ravishda beramiz.
describe_pet(pet_name='harry', animal_type='hamster)
I have a hamster.
My hamster's name is Harry.
Faqat ikki holatda ham argumentlarni uzatishda funksiya parameterlariga mos ismli o’zgaruvchilarga o’zlashtirgan holda uzatdik. Ikki holatda ham funksiyamiz bir hil natijani berganini ko’rishimiz mumkin.
ESLATMA: Kalit so’zli argumentlar (Keyword Arguments)dan foydalanib funksiyaga murojaat qilganda, funktsiya yaratishdagi parametrlarning aniq nomlaridan foydalanganingiz kerak bo’ladi.
Funksiyani e’lon qilayotganimizda uning har bir parameteriga default qiymatlarni berish mumkin. Va funksiyaga murojat qilishda uning argumentlari berilmasa unda Python parameterning default qiymatidan foydalanadi. Shuning uchun agar funksiyani e’lon qilayotganda defaul parameter berib ketilsa funksiyaga murojat vaqtida funksiyaga argumentni uzatish shart bo’lmay qoladi va yuqorida aytilgani kabi Python default qiymatlardan foydalanadi. Default parameterlardan foydalanish funksiyani chaqirishni soddalashtiradi va funksiyada odatda foydalaniladigan argumentlarni alohida uzatishga xojat qoldirmaydi. Misol uchun uy hayvoni haqida ma’lumot beradigan describe_pet() funksiyasida anima_type ga “dog” ni o’zlashtirish orqali default parameter sifatida belgilash mumkin. Chunki odatda biz it(dog)ni uy hayvoni sifatida uyda saqlaymiz.
def describe_pet(pet_name, animal_type='dog'):
"""Display information about a pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet(pet_name='willie')
Ko’rib turibsizki yuqoridagi misolda biz funksiyamizni chaqirganimizda argument o’rnida faqat itimizni ismi(pet_name=’willie’)ni uzatdik va uning turini argument sifatida kiritishga hojat qolmadi. Chunki uning defaul parameter animal_type ‘dog’ qiymatga ega. Natijamiz esa quydagicha bo’ladi:
I have a dog.
My dog's name is Willie.
E’tibor berish kerak bo’lgan narsa bu yearda funksiyaning parameterlarining tartibidir. Default qiymat sababli funksiyaning argumentida uy hayvoning turini kiritishning hojati yo’q. Bizda faqat uy hayvonining ismini kiritishimiz kerak bo’ladi holos. Python buni hali ham pozitsion argument sifatida biladi va funksiyaga faqatgina uy hayvonining ismi kiritiladigan bo’lsa unda bu argument funksiyaning birinchi parametriga mos keladi. Su sababdan birinchi funksiyaning birinchi parametri pet_name deb belgilashimiz kerak bo’ladi. Bu funksiyadan foydalanishning eng sodda usuli funksiyani chaqirganda uning argumentiga faqat itning ismini ko’rsatishdir:
describe_pet('willie')
Ushbu funktsiya chaqiruvi oldingi misol bilan bir xil natijaga ega bo’ladi. Taqdim etilgan yagona argument “willie” dir, shuning uchun u ta’rifdagi birinchi parametr, pet_name bilan mos keladi. animal_type uchun argument berilmaganligi sababli, Python standart “dog” qiymatidan foydalanadi.
Itdan boshqa hayvonni tasvirlash uchun siz quyidagi kabi funktsiya chaqiruvidan foydalanishingiz mumkin:
describe_pet(pet_name='harry', animal_type='hamster')
animal_type uchun aniq argument berilganligi sababli, Python parametrning default (standart) qiymatini e’tiborsiz qoldiradi.
ESLATMA: Standart qiymatlardan foydalanganda standart qiymatga ega bo’lgan har qanday parametr standart qiymatlarga ega bo’lmagan barcha parametrlardan keyin ro’yxatga olinishi kerak. Bu Pythonga pozitsion argumentlarni to’g’ri talqin qilishni davom ettirish imkonini beradi.
Positional argument, keyword va default argumentlarni birgalikda ishlatish mumkin bo’lganligi sababli funksiyani chaqirishda ham bir qancha variantlarni qo’llash mumkin. Default parameterga ega quydagi funksiyani ko’rib chiqaylik:
def describe_pet(pet_name, animal_type='dog'):
Yuqoridagi funksiyada ko’rinib turibdiki pet_name uchun har doim argumentlarni kiritish talab qilinadi va qiymat positional va keyword formatlarda berilishi mumkin. Agar animal_type dog bo’ladigan bo’lsa animal_type uchun qiymat kiritishning hojati yo’q chunki uning qiymati default parameter bilan berilgan. Agar animal_type dog bo’lmaydigan bo’lsa unda uning qiymati funksiya chaqirilayotga vaqtda majburiy kiritilish talab etiladi. Bu yo positional yoki keyword formatlarda berilishi mumkin.
Quydagi hamma funksiya chaqiruvlari bu funksiya uchun ishlaydi:
# A dog named Willie.
describe_pet('willie')
describe_pet(pet_name='willie')
# A hamster named Harry.
describe_pet('harry', 'hamster')
describe_pet(pet_name='harry', animal_type='hamster')
describe_pet(animal_type='hamster', pet_name='harry')
Yuqoridagi barcha funksiya chaqiruvlari bir xil natija beradi.
ESLATMA: Funksiyani qaysi uslubda chaqirishingizning ahamiyati yo’q. Muhimi sizning funksiyangiz siz kutgan natijani bersa bo’ldi. Shunchaki o’zingiz tushinishingiz oson bo’lgan uslubni tanlang.
Funksiyalardan foydalanishni boshlaganingizda argumentlarning mos kelmaslik xatoligiga dush kelsangiz ko’p ham hayron bo’lavermang. Funksiya ishlashi uchun zarur bo’lgan parameterlar soni kam yoki ko’p kiritilishi bunday xatoliklarga olib kelishi mumkin. Misol uchun quydagi describe_pet()) funksiyasini argumentlarsiz kiritganimizda nima sodir bo’lishini ko’rib chiqaylik:
def describe_pet(animal_type, pet_name):
"""Display information about a pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet()
Python funksiyamizda bazi ma’lumotlar yetishmayotganini payqaydi va traceback (xatolarni qidiruv tizimi) bizga bu haqida ma’lum qiladi.
Traceback (most recent call last):
File "pets.py", line 6, in <module>
describe_pet()
TypeError: describe_pet() messing 2 required positional arguments: 'animal_type' and 'pet_name'
Traceback xato sodir bo’lgan o’rinni ko’rsatadi. Bu esa o’sha joyga borib funksiya ichida nima xato bo’lganini ko’rish imkoniyatini beradi. Yuqoridagi xotolikda traceback 2 ta argument qolib ketganini va argumentlarning nomlarini ko’rsatib beryapti. Xatto funksiyamiz boshqa bir faylda yozilgan bo’lsa ham biz funksiyaga murojat qilishda qilgan xatoyimizni qayta to’g’irlab yozishimiz mumkin bo’ladi.
Python bizga funksiya codini o’qib taminlashimiz kerak bo’lgan parameterlar nimalar ekanligini aytib beradi. Bu sizning o’zgaruvchilaringiz va funktsiyalaringizga munosib nomlar berish uchun yana bir turtki beradi. Pythonning xatolik haqida beradigan xabarlari siz va siz yozgan koddan foydalanayotganlar uchun juda ham foydali bo’lishi mumkin.
Agar siz juda ko’p argumentlar keltirsangiz, funktsiya chaqiruvingizni funktsiyangizga moslashtirishga yordam beradigan shunga o’xshash traceback siz uchun foydali bo’lishi mumkin.
TOPSHIRIQ:
Topshiriq 3: make_shirt() degan funksiya yarating. Bu funksiyangiz size va message degan parameterlarga ega bo’lsin. Funksiyangizning tanasida kiyimning o’lchami(size)ni va kiyim ustiga yoziladigan xabar(message)ni chop (print) qilsin.
Topshiriq 4: make_shirt() funksiyangizga o’zgartirish kiriting.
Topshiriq 5: Topshiriq 4dagi make_shirt() funksiyangizga o’zgartirish kiriting.