[121, 1024, 64, 56.25, 25, 16, 27.5625] Ushbu misolda lyambda-funksiya aniqlangan sonlar roʻyhatining har bir elementi uchun kvadratini hisoblaydi va olingan natijalar kvadrati roʻyhatiga yozilgan.
Yuqoridagi misollardan koʻrinib turibdiki, lyambda-funksiyalar ham interpretator tomonidan oddiy funksiyalar kabi qayta ishlanadi va oddiy funksiyalarni ihcham shaklda yozishda koʻmak beradi.
Lyambda-funksiyalardan foydalanishning eng muhim afzalliklaridan biri – bu fuktsional dasturlashga imkon berishi bilan bogʻliq. Bu holat funksiyalari boshqa bir funksiyaga argument sifatida uzatish imkonini beradi (saralash haqidagi misolga e`tibor bering).
Odatiy funksiyalar bir nechta ifoda va koʻrsatmalardan iborat boʻlishi mumkin, lyambda-funksiyalar esa faqat bitta ifodani oʻz ichiga oladi.
Lyambda-funksiyalar oʻzi bilan bogʻlagan nomga ega boʻlmaydi. SHuning uchun ularni anonim funksiyalar deb ham yuritiladi. SHuningdek, return buyrugʻini ham oʻz ichiga olmaydi. Chunki, hosil qilingan qiymat talab qilingan joyga toʻgʻridan-toʻgʻri uzatiladi.
Lyambdalar odatda Pythonning ichki modullari bilan birgalikda qoʻllaniladi va ichki parametrlardan biri sifatida uzatiladi.
DEKORATORLAR
Dekoratorlar Python tilining eng muhim vositalaridan biri sanaladi va funksiyalar bilan ishlash amaliyotida keng qoʻllaniladi.
Dekorator — bu funksiya boʻlib, boshqa funksiya kodiga oʻzgarish kiritmagan holda uning vazifalarini kengaytirishga imkon berish maqsadida «oʻrab olish» ga imkon beradi.
Bu holat bir dastur tomonidan ikkinchi dastur bilan xuddi oʻzi uchun tashkil qilingan ma’lumotlar sifatida ishlashga ruhsat beradi.
Bilamizki, funksiya ‑ bu nomlangan va qandaydir muammoni hal qilishga qaratilgan amallar ketma⁃ketligidir. Odatda funksiyalar bitta masalani argumentlarning turli qiymatlari uchun qayta‑qayta hal qilishga toʻgʻri keladigan vaziyatlarda tashkil qilish maqsadga muvofiq hisoblanadi. Bunday funksiyalarga ehtiyojga koʻra dasturning ihtiyoriy qismida, boshqa funksiya tarkibida va hatto oʻziga oʻzi murojaat qilish mumkin.
Python tilida deyarli barcha vositalar ob`ekt sanaladi. Bu ma’noda uni ob`ektga asoslangan dasturlash tili deb hisoblash mumkin. Demak, Python da sonlar ham, satrlar ham, klass va funksiyalar ham ob`ekt sanaladi. Bu holat dasturchilar uchun katta imkoniyatlarni taqdim etadi. Funksiyalarni oʻzgaruvchilarga qiymat qilib berish, ularni argument sifatida boshqa funksiyalarga uzatish, boshqa funksiyalardan qaytarib olish, birining tarkibida ikkinchisini aniqlash va boshqalar ana shunday imkoniyatlardan hisoblanadi. Boshqacha aytganda, funksiyalar ‑ bu birinchi toifali ob`ektlardir.
Oʻzi ustida ob`ektlar uchun ruhsat berilgan barcha amallarni (parametr sifatida uzatish, oʻzgaruvchilarga qiymat qilib berish, funksiyalardan qaytarib olish va h.k.) bajarishga imkon beradigan elementlarni birinchi toifali ob`ektlar deb ataladi.
Funktsional dasturlash yuqori tartibli funksiyalardan foydalanishni nazarda tutadi. Funksiyalarni argument sifatida qabul qiladigan va natija tarzida boshqa funksiyalarga uzatadigan funksiyalarni yuqori tartibli deb hisoblanadi.
Python tilida funktsional dasturlashning ayrim elementlaridan keng foydalaniladi. Unda funksiyalar birinchi toifali ob`ektlar sanaladi va shu sababli yuqori tartibli funksiyalar bilan ishlash imkoniyatlari ham mavjud.
Oliy matematikada d/dx differentsial operatorga oʻxshash bir qator yuqori tartibli funksiyalar mavjud. Bu funksiyalar argument sifatida bitta funksiyani qabul qiladi va natija sifatida boshqa funksiyani qaytaradi. Dasturlashdagi yuqori tartibli funksiyalar ham huddi ana shu tamoyil ostida ishlaydi.
Quyidaga kod yordamida sodda funksiya tashkil qilingan va uning haqiqatdan ham ob`ekt ekanligini tekshirib koʻrilgan.
def hello_world(): print('Hello world!') print(type(hello_world)) class Hello: pass print(type(Hello)) print(type(10))
Koʻrish mumkinki, hello_world funksiyasi klassiga tegishli va demak, u function klassining ob`ekti hisoblanadi. Hozirgina aniqlangan klass type klassiga mansub boʻladi. Bu holatni keyinroq ochib beriladi.
Endi funksiyaga birinchi toifali ob`ekt sifatida qarab koʻraylik. Funksiyani oʻzgaruvchiga qiymat qilib berish mumkin.
def hello_world(): print('Hello world!') hello = hello_world print(helllo())
Bu funksiyani boshqa funksiya tarkibida aniqlash ham mumkin:
def qobiq_funcsiya() : def hello_world(): print('Hello world!') hello_world() print(qobiq_funcsiya())
Funksiyalarni boshqa funksiyalarga argument sifatida uzatish yoki fabul qilish mumkin:
def hello_world(): print('Hello world!') def higher_order(func): print('Argument sifatida {} '.format(func),'manzildan olindi') func() return func higher_order(hello_world) Yuqoridagi namunalardan koʻrinib turibdiki, Python tilida funksiyalar bilan ishlash yuqori darajada tashkil qilingan.
Dekoratorlarning ishlash tamoyilini quyidagi sodda dekorator yordamida bayon qilinadi:
def dekorator_funksiya(func): def wrapper(): print('Qobiq funksiya!') print(“Oʻralayotgan funksiya: {}'.format(func)) print(“Oʻralgan funksiya bajarilmoqda...') func() print(“Qobiqdan chiqish”) return wrapper Bu yerda dekorator_funksiya() funksiyasi dekorator hisoblanadi. U yuqori tartibli funksiya, chunki boshqa funksiyani argument sifatida qabul qilmoqda va oʻzi ham funksiya qaytarmoqda; dekorator_funsiya() dektoratori tarkibida boshqa funksiya aniqlagan. Bu funksiya argument‑funksiyani oʻrab oladi va uning hulqini oʻzgartiradi. Dekorator ana shu qobiqni qaytaradi. Amaldagi dekoratorga namuna:
def dekorator_funksiya(func): def wrapper(): print('Qobiq funksiya!') print('Oralayotgan funksiya: {}'.format(func)) print('Oralgan funksiya bajarilmoqda ') func() print('Qobiqdan chiqish') return wrapper @dekorator_funksiya def hello_world(): print('Hello world!') print(hello_world())
Bu yerda hello_world() funksiyasini e`lon qilishdan avval shunchaki @decorator_funksiya ni koʻrsatish bilan uning hulqi oʻzgartirilgan. Boshqacha aytganda, @decorator_funksiya ifoda decorator_funksiya() funksiyasiga hello_world argumenti bilan murojaat qilishni ta’minlaydi va shu bilan birga hello_world nomini qaytarilayotgan funksiyaga beradi.
Shunday qilib, dekorator — bu bir funksiya tomonidan boshqa bir funksiya kodiga oʻzgartirish kiritmagan holda uning imkoniyatlarini kengaytirish maqsadida oʻrab oluvchi funksiyadir.