Seyrializatsiya (serializatsiya) nima?
Seyrializatsiya — bu obyektlarni baytlar oqimiga aylantirish jarayoni bo‘lib, ular faylga, ma’lumotlar bazasiga saqlanishi yoki tarmoq orqali uzatilishi mumkin.
🧠 Bu yordamida obyekt holatini saqlab qo‘yish va keyinroq tiklash mumkin bo‘ladi.
📌 Seyrializatsiyaning afzalliklari:
✅ Dastur sessiyalari orasida obyekt holatini saqlash va tiklash.
✅ Obyektlarni tarmoq orqali boshqa ilovalar yoki serverlarga uzatish.
✅ Platformaga bog‘liq bo‘lmagan saqlash formatiga aylantirish imkoniyati (masalan: JSON, XML, pickle).
💡 Oddiy qilib aytganda, seyrializatsiya — bu ma’lumotlarni saqlash yoki yuborish uchun “yig‘ishtirib” olish jarayoni.
Seyrializatsiya — bu obyektlarni baytlar oqimiga aylantirish jarayoni bo‘lib, ular faylga, ma’lumotlar bazasiga saqlanishi yoki tarmoq orqali uzatilishi mumkin.
🧠 Bu yordamida obyekt holatini saqlab qo‘yish va keyinroq tiklash mumkin bo‘ladi.
📌 Seyrializatsiyaning afzalliklari:
✅ Dastur sessiyalari orasida obyekt holatini saqlash va tiklash.
✅ Obyektlarni tarmoq orqali boshqa ilovalar yoki serverlarga uzatish.
✅ Platformaga bog‘liq bo‘lmagan saqlash formatiga aylantirish imkoniyati (masalan: JSON, XML, pickle).
💡 Oddiy qilib aytganda, seyrializatsiya — bu ma’lumotlarni saqlash yoki yuborish uchun “yig‘ishtirib” olish jarayoni.
# Python'da misol (pickle yordamida):
import pickle
data = {'user': 'Ali', 'age': 25}
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
__all__ atributi nima uchun kerak?
Python dasturlashda __all__ — bu moduldan from modul import * yordamida nima eksport qilinishini boshqaruvchi maxsus atribut.
🔍 Asosiy ma'lumotlar:
✅ all — bu eksport qilinadigan nomlar ro‘yxati bo‘lishi kerak.
✅ Agar all aniqlanmagan bo‘lsa, import * barcha _ bilan boshlanmagan nomlarni import qiladi.
✅ all yordamida modul muallifi faqat ommaviy API qismlarini eksport qilinishini nazorat qilishi mumkin.
✅ Ichki funksiyalar, klasslar yoki o‘zgaruvchilar tasodifan eksport qilinmaydi — bu kodni toza va tartibli saqlashga yordam beradi.
💡 Qisqacha qilib aytganda, all — bu modulning ko‘rinishini boshqaruvchi oddiy, ammo foydali vosita.
📦 Foydalaning — kod yanada tushunarli va xavfsiz bo‘ladi!
Python dasturlashda __all__ — bu moduldan from modul import * yordamida nima eksport qilinishini boshqaruvchi maxsus atribut.
🔍 Asosiy ma'lumotlar:
✅ all — bu eksport qilinadigan nomlar ro‘yxati bo‘lishi kerak.
✅ Agar all aniqlanmagan bo‘lsa, import * barcha _ bilan boshlanmagan nomlarni import qiladi.
✅ all yordamida modul muallifi faqat ommaviy API qismlarini eksport qilinishini nazorat qilishi mumkin.
✅ Ichki funksiyalar, klasslar yoki o‘zgaruvchilar tasodifan eksport qilinmaydi — bu kodni toza va tartibli saqlashga yordam beradi.
💡 Qisqacha qilib aytganda, all — bu modulning ko‘rinishini boshqaruvchi oddiy, ammo foydali vosita.
# Misol:
__all__ = ['foydali_funktsiya', 'OmmaviyKlass']
📦 Foydalaning — kod yanada tushunarli va xavfsiz bo‘ladi!
#oddiy_tilda #class
Hamma class, class deyveradi class o'zi nima? Hech tushunolmayman🧐
class — bu obyektga yo‘naltirilgan dasturlash asosidagi shablon bo‘lib, u yordamida obyektlar (ya'ni real hayotdagi narsalarning dasturdagi modellari) yaratiladi.
Xop class obyektlar yaratish uchun shablon ekan, buni tushundim lekin nega men bu shablondan foydalanishim kerak, usiz kod yozolmaymanmi?
Albatta yozish mumkin, xuddiki bir kamaz tuproqni mashinada emas qo'lda tashiganday bo'lasiz xalos, tuproq oz bo'lsaku (kichik programmachalar) bilinmaydi, lekin juda ko'p bo'lsachi?
class — bu bir xil xususiyat va funksiyalarga ega obyektlar uchun shablon. E'tibor bering bir xil xususiyatga ega obyektlar uchun shablon.
Tasavvur qiling, siz ming xil odam qatnashgan o'yin yaratyapsiz. Endi har bir odam uchun noldan kod yozib chiqasizmi? Bitta odamni yasashga aytaylik 1 kun vaqtiz ketadi, shunda dasturni ming kunda bitirasizmi?
Shu joyda sizga class yordamga keladi, class so'zini tarjimasi sinf to'g'rimi? Siz to'g'ri tushundingiz biz o'yinda ishtirok etadigan obyektlarni sinflarga bo'lamiz, masalan mingta odamni bitta inson sinfiga tegishli deymiz. Ya'ni inson degan class yaratamiz va unga hamma insonlar uchun umumiy bo'lgan xususiyatlarni (boshi bor, ikkita qo'li, ikkita oyog'i bor, oyoqlari bilan yuradi va hokazo) shablon qilib kiritib qo'yamiz.
Nima deb o'ylaysiz endi ishimiz osonlashadimi? Albatta osonlashadi chunki biz bir marta shablon yozamiz va bu shablondan mingta odam obyektini yaratishda foydalanamiz bu orqali hammaga umumiy bo'lgan xususiyatlarni qayta yozib o'tirmay oldin yozilganidan foydalanamiz😀.
class larni yana ko'plab foydali imkoniyatlari bor va ular bilan keyingi postlarda tanishamiz.
Agar foydali bo'lgan bo'lsa reaksiya ❤️ qoldirishni unutmang.
Bu reaksiya bizga motivatsiya bo'ladi va tayyorlayotgan kontentimiz sifatining yanada oshishiga sabab bo'ladi
Hamma class, class deyveradi class o'zi nima? Hech tushunolmayman🧐
class — bu obyektga yo‘naltirilgan dasturlash asosidagi shablon bo‘lib, u yordamida obyektlar (ya'ni real hayotdagi narsalarning dasturdagi modellari) yaratiladi.
Xop class obyektlar yaratish uchun shablon ekan, buni tushundim lekin nega men bu shablondan foydalanishim kerak, usiz kod yozolmaymanmi?
Albatta yozish mumkin, xuddiki bir kamaz tuproqni mashinada emas qo'lda tashiganday bo'lasiz xalos, tuproq oz bo'lsaku (kichik programmachalar) bilinmaydi, lekin juda ko'p bo'lsachi?
class — bu bir xil xususiyat va funksiyalarga ega obyektlar uchun shablon. E'tibor bering bir xil xususiyatga ega obyektlar uchun shablon.
Tasavvur qiling, siz ming xil odam qatnashgan o'yin yaratyapsiz. Endi har bir odam uchun noldan kod yozib chiqasizmi? Bitta odamni yasashga aytaylik 1 kun vaqtiz ketadi, shunda dasturni ming kunda bitirasizmi?
Shu joyda sizga class yordamga keladi, class so'zini tarjimasi sinf to'g'rimi? Siz to'g'ri tushundingiz biz o'yinda ishtirok etadigan obyektlarni sinflarga bo'lamiz, masalan mingta odamni bitta inson sinfiga tegishli deymiz. Ya'ni inson degan class yaratamiz va unga hamma insonlar uchun umumiy bo'lgan xususiyatlarni (boshi bor, ikkita qo'li, ikkita oyog'i bor, oyoqlari bilan yuradi va hokazo) shablon qilib kiritib qo'yamiz.
Nima deb o'ylaysiz endi ishimiz osonlashadimi? Albatta osonlashadi chunki biz bir marta shablon yozamiz va bu shablondan mingta odam obyektini yaratishda foydalanamiz bu orqali hammaga umumiy bo'lgan xususiyatlarni qayta yozib o'tirmay oldin yozilganidan foydalanamiz😀.
class larni yana ko'plab foydali imkoniyatlari bor va ular bilan keyingi postlarda tanishamiz.
Agar foydali bo'lgan bo'lsa reaksiya ❤️ qoldirishni unutmang.
Bu reaksiya bizga motivatsiya bo'ladi va tayyorlayotgan kontentimiz sifatining yanada oshishiga sabab bo'ladi
❤1👍1
Inheritance va polymorphismni oddiy qilib tushuntirib berishimni xohlaganlar bormi?
Anonymous Poll
63%
Ha
25%
Albatta😂
13%
Yo'q
Class (sinf) – obyektlar uchun andoza
Class – bu siz yaratmoqchi bo‘lgan obyektlar (narsalar) uchun qolip (shablon).
Misol:
Obyekt yaratish:
Class – bu siz yaratmoqchi bo‘lgan obyektlar (narsalar) uchun qolip (shablon).
Misol:
class Car:
def __init__(self, brand, color):
self.brand = brand
self.color = color
def drive(self):
print(f"{self.color} {self.brand} yurmoqda.")
Obyekt yaratish:
my_car = Car("Tesla", "oq")
my_car.drive() # oq Tesla yurmoqda.
👍1🔥1
#oddiy_tilda #inheritance
Meros olish (inheritance) o'zi nima, qaydan kelib qoldi endi bu tushuncha?
Meros olish — bu yangi klass yaratishda, avvalgi klassdagi kodni qayta yozmasdan foydalanish imkonini beradi. Bu kodni takrorlamaslik, modullikni saqlash va kodni boshqarishni osonlashtirish uchun kerak.
Bir qarasa kodni takrorlamaslik uchun klass ishlatiladi deysizlar, bir qarasa meros olish kodni takrorlamaslik uchun kerak deysizlar, sizlar hazillashyapsizlarmi?
Yo'q albatta biz hazillashmayapmiz, siz haqsiz klass kodni qayta yozmaslikni ta'minlaydi, takrorlanishlarni oldini oladi, lekin biz meros olishni ham bilsak klassni o'zi bilan erisholmagan soddalashtirishlarni amalga oshiramiz.
Qanday qilib? Klass misolida ko'rgandik mingta odamni dasturda yaratishni va takrorlanishlarni oldini olish maqsadida ular uchun shablon hisoblangan inson degan sinf yaratgandik. Shu orqali kod yozishdagi takrorlanishlarni oldini olgandik, ishni tezlashtirgandik, lekin meros olish nimaga kerak?
Xuddi shu misolga qaytsak, biz dasturda mingta odamning obyektini yaratmoqchimiz, har birining kodini alohida yozmaslik uchun inson degan klass yaratdik va mingta odam uchun ham umumiy bo'lgan xususiyatlarni shu inson klassida jamladik, va bu ishimizni yengillashtirdi. Endi ishimizni bundan ham yengillashtirish imkoni bormi desak ha va bu meros olish orqali amalga oshiriladi:
mingta odam avvalo inson degan sinfga tegishli, lekin biz ularni yana sinf ichidagi sinflarga bo'lsak bo'ladi, ya'ni inson degan sinfni yana o'qituvchilar, duratgorlar, fudbolistlar sinflariga (class lari) bo'lsak bo'ladi.
Xop sinfni yana sinflarga bo'ldik ham deylik, biz inson degan sinfda hammaga umumiy bo'lgan xususiyatlarni jamlagandik, lekin endi biz o'qituvchi sinfini yaratmoqchimiz va faqatgina o'qituvchilar uchun umumiy bo'lgan xususiyatlar uchun shablon (class) yaratmoqchimiz. Shunda hamma insonlar uchun umumiy bo'lgan xususiyatlarni bu sinfda qayta yozmaslik uchun inson sinfidan meros qilib olamiz, meros qilib olishimiz tufayli endi o'qituvchi sinfi ichida hech nima yozmasak ham inson sinfi nimaga xususiyat va metodlarga (klassga tegishli bo'lgan funksiyalar) ega bo'lsa o'qituvchi sinfi ham shularga ega bo'ladi, va biz qo'shimcha qilib faqat o'qituvchilarga tegishli bo'lgan umumiy xususiyatlarni shu o'qituvchi sinfida shablon qilib yaratvolamiz.
Shunday qilib biz o'qituvchi klassidan obyekt yaratsak, bu obyekt inson sinfidagi xususiyatlarga ham ega bo'ladi. Shunday qilib kod yozishni yanada soddalashtirish va tezlashtirishga muvaffaq bo'lamiz.
class orqali obyektlar uchun shablon yaratgandik, meros olish orqali shu shablon class ni boshqa class lar uchun shablon sifatida ishlatsak bo'ladi!
Post uzun bo'lib ketgan bo'lsa uzur, yaxshiroq tushintirishga harakat qildim. Foydali bo'lgan bo'lsa reaksiya qoldirishni 👍 va do'stlarga ulashishni unutmang!
Meros olish (inheritance) o'zi nima, qaydan kelib qoldi endi bu tushuncha?
Meros olish — bu yangi klass yaratishda, avvalgi klassdagi kodni qayta yozmasdan foydalanish imkonini beradi. Bu kodni takrorlamaslik, modullikni saqlash va kodni boshqarishni osonlashtirish uchun kerak.
Bir qarasa kodni takrorlamaslik uchun klass ishlatiladi deysizlar, bir qarasa meros olish kodni takrorlamaslik uchun kerak deysizlar, sizlar hazillashyapsizlarmi?
Yo'q albatta biz hazillashmayapmiz, siz haqsiz klass kodni qayta yozmaslikni ta'minlaydi, takrorlanishlarni oldini oladi, lekin biz meros olishni ham bilsak klassni o'zi bilan erisholmagan soddalashtirishlarni amalga oshiramiz.
Qanday qilib? Klass misolida ko'rgandik mingta odamni dasturda yaratishni va takrorlanishlarni oldini olish maqsadida ular uchun shablon hisoblangan inson degan sinf yaratgandik. Shu orqali kod yozishdagi takrorlanishlarni oldini olgandik, ishni tezlashtirgandik, lekin meros olish nimaga kerak?
Xuddi shu misolga qaytsak, biz dasturda mingta odamning obyektini yaratmoqchimiz, har birining kodini alohida yozmaslik uchun inson degan klass yaratdik va mingta odam uchun ham umumiy bo'lgan xususiyatlarni shu inson klassida jamladik, va bu ishimizni yengillashtirdi. Endi ishimizni bundan ham yengillashtirish imkoni bormi desak ha va bu meros olish orqali amalga oshiriladi:
mingta odam avvalo inson degan sinfga tegishli, lekin biz ularni yana sinf ichidagi sinflarga bo'lsak bo'ladi, ya'ni inson degan sinfni yana o'qituvchilar, duratgorlar, fudbolistlar sinflariga (class lari) bo'lsak bo'ladi.
Xop sinfni yana sinflarga bo'ldik ham deylik, biz inson degan sinfda hammaga umumiy bo'lgan xususiyatlarni jamlagandik, lekin endi biz o'qituvchi sinfini yaratmoqchimiz va faqatgina o'qituvchilar uchun umumiy bo'lgan xususiyatlar uchun shablon (class) yaratmoqchimiz. Shunda hamma insonlar uchun umumiy bo'lgan xususiyatlarni bu sinfda qayta yozmaslik uchun inson sinfidan meros qilib olamiz, meros qilib olishimiz tufayli endi o'qituvchi sinfi ichida hech nima yozmasak ham inson sinfi nimaga xususiyat va metodlarga (klassga tegishli bo'lgan funksiyalar) ega bo'lsa o'qituvchi sinfi ham shularga ega bo'ladi, va biz qo'shimcha qilib faqat o'qituvchilarga tegishli bo'lgan umumiy xususiyatlarni shu o'qituvchi sinfida shablon qilib yaratvolamiz.
Shunday qilib biz o'qituvchi klassidan obyekt yaratsak, bu obyekt inson sinfidagi xususiyatlarga ham ega bo'ladi. Shunday qilib kod yozishni yanada soddalashtirish va tezlashtirishga muvaffaq bo'lamiz.
class orqali obyektlar uchun shablon yaratgandik, meros olish orqali shu shablon class ni boshqa class lar uchun shablon sifatida ishlatsak bo'ladi!
Post uzun bo'lib ketgan bo'lsa uzur, yaxshiroq tushintirishga harakat qildim. Foydali bo'lgan bo'lsa reaksiya qoldirishni 👍 va do'stlarga ulashishni unutmang!
👍1
Polymorphism (ko‘p shakllilik) ni qanchalik tushunasiz?
Anonymous Poll
60%
to'liq tushunaman, u yog'idan kirib bu yog'idan chiqib ketaman
20%
tushunaman lekin to'liqmas
20%
umuman tushunmayman, nima edi u o'zi
👍1🔥1
👨👦👦 Inheritance (meros olish) – boshqa classdan xususiyatlarni olish
Inheritance yordamida bir class boshqa classdan funksiya va xususiyatlarni meros oladi, ya’ni takror yozmasdan foydalanish mumkin.
Misol:
Avtomobil, Avtobus va Mototsikl classlari Transport classidan hamma transportlar uchun umumiy bo'lgan nomi, tezlik, yoqilgi kabi atributlar va harakatlan, toxta, info kabi metodlarni meros qilib oldi, keyin hammasi o'ziga tegishli bo'lgan atributlarni qo'shdi va info metodiga qo'shimcha kiritdi.
Inheritance yordamida bir class boshqa classdan funksiya va xususiyatlarni meros oladi, ya’ni takror yozmasdan foydalanish mumkin.
Misol:
# Superklass (umumiy klass)
class Transport:
def __init__(self, nomi, tezlik, yoqilgi):
self.nomi = nomi
self.tezlik = tezlik # km/soat
self.yoqilgi = yoqilgi
def harakatlan(self):
print(f"{self.nomi} {self.tezlik} km/soat tezlikda harakatlanmoqda.")
def toxta(self):
print(f"{self.nomi} to‘xtadi.")
def info(self):
print(f"Nomi: {self.nomi}, Tezlik: {self.tezlik} km/soat, Yoqilg‘i: {self.yoqilgi}")
# Subklasslar (avtomobil, avtobus, mototsikl) Transport klassidan meros oladi
class Avtomobil(Transport):
def __init__(self, nomi, tezlik, yoqilgi, eshiklar_soni):
super().__init__(nomi, tezlik, yoqilgi)
self.eshiklar = eshiklar_soni
def info(self):
super().info()
print(f"Eshiklar soni: {self.eshiklar}")
class Avtobus(Transport):
def __init__(self, nomi, tezlik, yoqilgi, yolovchilar_soni):
super().__init__(nomi, tezlik, yoqilgi)
self.yolovchilar = yolovchilar_soni
def info(self):
super().info()
print(f"Yo‘lovchilar sig‘imi: {self.yolovchilar} kishi")
class Mototsikl(Transport):
def __init__(self, nomi, tezlik, yoqilgi, turi):
super().__init__(nomi, tezlik, yoqilgi)
self.turi = turi # Masalan: sport, klassik
def info(self):
super().info()
print(f"Mototsikl turi: {self.turi}")
Avtomobil, Avtobus va Mototsikl classlari Transport classidan hamma transportlar uchun umumiy bo'lgan nomi, tezlik, yoqilgi kabi atributlar va harakatlan, toxta, info kabi metodlarni meros qilib oldi, keyin hammasi o'ziga tegishli bo'lgan atributlarni qo'shdi va info metodiga qo'shimcha kiritdi.
👍1
#oddiy_tilda #polymorphism
Navbatdagi razbor qilinadigan atama bu "Polymorphism". Tayyormisizlar?
Bir xil nomdagi metod yoki funksiyaning turli klasslarda har xil ishlashi - polymorphism hisoblanadi.
Tushunmadim, shu xalosmi? Bu nima degani o'zi, nimaga kerak?
Yana tasavvur qilamiz, oxirgi paytda ishimiz shu bo'lib qoldi, tasavvur yaxshi narsada😁!
Aytaylik siz katta bir korxonaning egasisiz, va bu korxonada har xil kasbli mutaxassislar bor, ularning hammasini ishi bor va bu ishlar har xil, bugalter pul kirdi chiqdisini hisoblaydi, sotuvchi sotuv bilan shug'ullanadi, omborchi mahsulotlarni omborga joylashtiradi va hakozo. Eng muhimi har kuni ular ishni sizni buyrug'ingizdan keyin boshlaydi.
Endi sizga savol siz ularni hammasiga alohida buyruq berasizmi:
1. bugalterga - sen pullarni hisob kitob qilishni boshla, sotuvchiga - sen dokondagi hamma mahsulotlarni sotuvini boshla, omborchiga - sen tayyor mahsulotlarni omborga joylashtir va sotuvchiga yetkazib tur, va hakozo.
2. yoki bitta buyruq bilan hamma ishini boshlasin deysizu, hamma boshqalarning ishidan farqli bo'lgan o'zini ishini qiladi. Vaholangki ularning hammasi boshqa-boshqa ish qiladi lekin buyruq bitta.
Agar siz ikkinchi holatni tanlasangiz, bu yaxshi va bu holatga polymorphism deyiladi albatta. Yoki oddiy til bilan aytganda:
"Bitta buyruq — turli shakllarda bajarilishi" polymorphismdir!
Boshqa misol, faraz qiling hayvonlarga “ovoz chiqar” degan buyruq beriladi:
• It: “Vov-vov” deydi.
• Mushuk: “Miyov” deydi.
• Sigir: “Moo” deydi.
Ularning har biriga bir xil buyruq berildi – ovoz chiqar – lekin har biri o‘ziga xos javob berdi.
Bu — polymorphism!
Agar ma'lumot foydali bo'lgan bo'lsa reaksiya qoldirishni unutmang! Do'stlarga ulashishni ham!
Navbatdagi razbor qilinadigan atama bu "Polymorphism". Tayyormisizlar?
Bir xil nomdagi metod yoki funksiyaning turli klasslarda har xil ishlashi - polymorphism hisoblanadi.
Tushunmadim, shu xalosmi? Bu nima degani o'zi, nimaga kerak?
Yana tasavvur qilamiz, oxirgi paytda ishimiz shu bo'lib qoldi, tasavvur yaxshi narsada😁!
Aytaylik siz katta bir korxonaning egasisiz, va bu korxonada har xil kasbli mutaxassislar bor, ularning hammasini ishi bor va bu ishlar har xil, bugalter pul kirdi chiqdisini hisoblaydi, sotuvchi sotuv bilan shug'ullanadi, omborchi mahsulotlarni omborga joylashtiradi va hakozo. Eng muhimi har kuni ular ishni sizni buyrug'ingizdan keyin boshlaydi.
Endi sizga savol siz ularni hammasiga alohida buyruq berasizmi:
1. bugalterga - sen pullarni hisob kitob qilishni boshla, sotuvchiga - sen dokondagi hamma mahsulotlarni sotuvini boshla, omborchiga - sen tayyor mahsulotlarni omborga joylashtir va sotuvchiga yetkazib tur, va hakozo.
2. yoki bitta buyruq bilan hamma ishini boshlasin deysizu, hamma boshqalarning ishidan farqli bo'lgan o'zini ishini qiladi. Vaholangki ularning hammasi boshqa-boshqa ish qiladi lekin buyruq bitta.
Agar siz ikkinchi holatni tanlasangiz, bu yaxshi va bu holatga polymorphism deyiladi albatta. Yoki oddiy til bilan aytganda:
"Bitta buyruq — turli shakllarda bajarilishi" polymorphismdir!
Boshqa misol, faraz qiling hayvonlarga “ovoz chiqar” degan buyruq beriladi:
• It: “Vov-vov” deydi.
• Mushuk: “Miyov” deydi.
• Sigir: “Moo” deydi.
Ularning har biriga bir xil buyruq berildi – ovoz chiqar – lekin har biri o‘ziga xos javob berdi.
Bu — polymorphism!
Agar ma'lumot foydali bo'lgan bo'lsa reaksiya qoldirishni unutmang! Do'stlarga ulashishni ham!
👍2🔥1
🔁 Polymorphism (ko‘p shakllilik) – bir xil metod har xil sinflarda boshqacha ishlashi
Polymorphism — bu obyektga yo‘naltirilgan dasturlashda bir xil nomdagi metod yoki funksiyaning turli klasslarda har xil ishlashi degani.
Misol:
speak() har xil sinflarda har xil natija berdi – bu polimorfizm.
Polymorphism — bu obyektga yo‘naltirilgan dasturlashda bir xil nomdagi metod yoki funksiyaning turli klasslarda har xil ishlashi degani.
Misol:
class Cat:
def speak(self):
print("Miyov!")
class Cow:
def speak(self):
print("Mo-o-o!")
def animal_sound(animal):
animal.speak()
animal_sound(Cat()) # Miyov!
animal_sound(Cow()) # Mo-o-o!
speak() har xil sinflarda har xil natija berdi – bu polimorfizm.
❤1👍1🔥1
O'rgatilayotgan bilimlarni sinash uchun t.me/python_fastapi_uz_quiz kanalini yaratib qo'ydik, xoxlasanglar foydalanishinglar mumkin!
👍2🔥2
🌀 Generator nima?
Generator — bu maxsus funksiya bo‘lib, u katta hajmdagi ma’lumotlarni bitta-bitta (navbatma-navbat) yaratadi. U yield kalit so‘zi yordamida ishlaydi.
Bu xuddi televizordan tomosha qilish o‘rniga, bir vaqtning o‘zida faqat bir sahifasini chiqaradigan kitobga o‘xshaydi. Har safar kerak bo‘lganda navbatdagi sahifa (qiymat) chiqariladi.
🎯 Nega generator kerak?
Oddiy funksiya:
Bu funksiya butun ro‘yxatni birdan qaytaradi va xotirada saqlaydi. Katta ro‘yxat bo‘lsa — xotira ko‘p ishlatiladi.
Generator:
Bu funksiya esa har safar bittadan qiymat chiqaradi va xotirani tejaydi.
Generator — bu maxsus funksiya bo‘lib, u katta hajmdagi ma’lumotlarni bitta-bitta (navbatma-navbat) yaratadi. U yield kalit so‘zi yordamida ishlaydi.
Bu xuddi televizordan tomosha qilish o‘rniga, bir vaqtning o‘zida faqat bir sahifasini chiqaradigan kitobga o‘xshaydi. Har safar kerak bo‘lganda navbatdagi sahifa (qiymat) chiqariladi.
🎯 Nega generator kerak?
Oddiy funksiya:
def list_numbers():
return [1, 2, 3]
print(list_numbers())
Bu funksiya butun ro‘yxatni birdan qaytaradi va xotirada saqlaydi. Katta ro‘yxat bo‘lsa — xotira ko‘p ishlatiladi.
Generator:
def gen_numbers():
yield 1
yield 2
yield 3
for num in gen_numbers():
print(num)
Bu funksiya esa har safar bittadan qiymat chiqaradi va xotirani tejaydi.
👍2🔥1
Agar generatorni kimgadir oddiy tilda tushuntirishim qiziq bo'lsa reksiya qoldirsin, hech bo'lmaganda bitta odam uchun foydali bo'lsa tushuntirib beraman, oddiy tilda o'xshatish orqali 👍
🔥2👍1😁1
🔁 yield nima?
• return funksiyani to‘xtatadi va qiymatni beradi.
• yield esa bir marta qiymat beradi, ammo funksiyani to‘xtatmaydi.
• Keyingi safar chaqirilganda, yield dan keyingi qatorlardan davom etadi.
🔧 Oddiy generator misoli
Natija:
• return funksiyani to‘xtatadi va qiymatni beradi.
• yield esa bir marta qiymat beradi, ammo funksiyani to‘xtatmaydi.
• Keyingi safar chaqirilganda, yield dan keyingi qatorlardan davom etadi.
🔧 Oddiy generator misoli
def sonlar():
print("1 chi son")
yield 1
print("2 chi son")
yield 2
print("3 chi son")
yield 3
for s in sonlar():
print("Chiqarildi:", s)
Natija:
1 chi son
Chiqarildi: 1
2 chi son
Chiqarildi: 2
3 chi son
Chiqarildi: 3
👍3
📦 Generator qanday foydali?
Masalan, 1 millionta sonni chiqarish:
Bu yerda xotirada 1 millionta son saqlanmaydi (oddiy ro'yxatda bo'lsa 1 millionta son operativ xotirada saqlanib turadi), faqat kerakli sonlar yaratiladi.
🧪 Generator expression (generator ifodasi)
Bu generatorning qisqa yozilish usuli:
Natija:
Bu list comprehension ga o‘xshaydi: [x*x for x in range(3)], lekin generator xotirani tejaydi.
Masalan, 1 millionta sonni chiqarish:
def million():
for i in range(1_000_000):
yield i
# Bu juda katta ro'yxat bo'lishi mumkin, ammo generator xotirani tejaydi
for i in million():
if i == 5:
break
print(i)
Bu yerda xotirada 1 millionta son saqlanmaydi (oddiy ro'yxatda bo'lsa 1 millionta son operativ xotirada saqlanib turadi), faqat kerakli sonlar yaratiladi.
🧪 Generator expression (generator ifodasi)
Bu generatorning qisqa yozilish usuli:
gen = (x * x for x in range(3))
for i in gen:
print(i)
Natija:
0
1
4
Bu list comprehension ga o‘xshaydi: [x*x for x in range(3)], lekin generator xotirani tejaydi.
👍3
Isoqjanov Ilyos | Python
Agar generatorni kimgadir oddiy tilda tushuntirishim qiziq bo'lsa reksiya qoldirsin, hech bo'lmaganda bitta odam uchun foydali bo'lsa tushuntirib beraman, oddiy tilda o'xshatish orqali 👍
Bitta bo'lsa ham reaksiya qoldirilibdi, shuning uchun o'xshatish:
1. oddiy ro'yxat va generatorni farqi haqida:
oddiy ro'yxat bizga kerakli qiymatlarni hammasini bittada olib keladi, generator esa bizga kerakli qiymatlar to'plamini bittadan olib keladi (tashiydi)
Tasavvur qiling siz qurilish qilyapsiz va devor uryapsiz, sizga 1000 ta g'isht kerak, ro'yxat shu g'ishlarni bittada olib keladi, generator esa bittadan olib keladi (albatta g'isht uyumi uncha uzoqda emas)
2. generator nimaga xotirani tejaydi?
keltirgan misolimizda sizni g'isht qo'yadigan joyingiz chekli sondagi g'isht qo'yishga moslashtirilgan, ya'ni xotira chekli
o'sha joyga ro'yxat bittada 1000 ta g'ishtni olib kirib qo'ydi va sizni g'isht qo'yadigan joyingizdan ko'proq joy egalladi, ya'niki xotiradan
generator esa sizga bitta g'isht olib keldi siz uni ishlatasiz keyin yana bitta g'isht olib keladi, g'isht qo'yadigan joydan juda kam joy oladi, ya'niki xotiradan
3. qachon ro'yxat ishlatish kerak, qachon generator? qaysi biri tez ishlaydi?
To'g'ri sizga mingta g'isht kerak bo'lsa ro'yxat xotiradan ozginagina ko'p joy olgani bilan, 1000 ta g'ishtni hammasi srazi yonida bo'lgan odam tezroq ishlaydi va bu holatda ro'yxat afzal,
Lekin tasavvur qiling sizga millionta g'isht kerak va ro'yxat uni sizga hammasini bittada olib kelib berdi, birinchidan u juda ko'p joy oladi (ya'niki xotiradan), ikkinchidan ishlashga xalaqit qiladi, bu holatda generator afzal va tezroq ishlaydi
1. oddiy ro'yxat va generatorni farqi haqida:
oddiy ro'yxat bizga kerakli qiymatlarni hammasini bittada olib keladi, generator esa bizga kerakli qiymatlar to'plamini bittadan olib keladi (tashiydi)
Tasavvur qiling siz qurilish qilyapsiz va devor uryapsiz, sizga 1000 ta g'isht kerak, ro'yxat shu g'ishlarni bittada olib keladi, generator esa bittadan olib keladi (albatta g'isht uyumi uncha uzoqda emas)
2. generator nimaga xotirani tejaydi?
keltirgan misolimizda sizni g'isht qo'yadigan joyingiz chekli sondagi g'isht qo'yishga moslashtirilgan, ya'ni xotira chekli
o'sha joyga ro'yxat bittada 1000 ta g'ishtni olib kirib qo'ydi va sizni g'isht qo'yadigan joyingizdan ko'proq joy egalladi, ya'niki xotiradan
generator esa sizga bitta g'isht olib keldi siz uni ishlatasiz keyin yana bitta g'isht olib keladi, g'isht qo'yadigan joydan juda kam joy oladi, ya'niki xotiradan
3. qachon ro'yxat ishlatish kerak, qachon generator? qaysi biri tez ishlaydi?
To'g'ri sizga mingta g'isht kerak bo'lsa ro'yxat xotiradan ozginagina ko'p joy olgani bilan, 1000 ta g'ishtni hammasi srazi yonida bo'lgan odam tezroq ishlaydi va bu holatda ro'yxat afzal,
Lekin tasavvur qiling sizga millionta g'isht kerak va ro'yxat uni sizga hammasini bittada olib kelib berdi, birinchidan u juda ko'p joy oladi (ya'niki xotiradan), ikkinchidan ishlashga xalaqit qiladi, bu holatda generator afzal va tezroq ishlaydi
👍3🔥1
Hamma postlarimga o'zim layk bosim chiqsammikin a, keyin ko'zim ko'rib quvonardim layk bosilibdi deb😁
👍5👏2
Context Managers (Kontekst menejerlari)
Context Manager — bu with operatori orqali blok ichida resursni ochib-yopishni boshqaruvchi obyekt. Masalan, fayl ochish va avtomatik yopish.
Misol:
O‘zimiz context manager yozish (klass bilan):
Yoki funksiya bilan (contextlib):
Context Manager — bu with operatori orqali blok ichida resursni ochib-yopishni boshqaruvchi obyekt. Masalan, fayl ochish va avtomatik yopish.
Misol:
with open('file.txt', 'r') as f:
data = f.read()
# Fayl avtomatik yopiladi
O‘zimiz context manager yozish (klass bilan):
class MyContext:
def __enter__(self):
print("Kontekstga kirildi")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("Kontekstdan chiqildi")
with MyContext():
print("Ichkarida ishlayapti")
Yoki funksiya bilan (contextlib):
from contextlib import contextmanager
@contextmanager
def my_context():
print("Boshlanmoqda")
yield
print("Tugallanmoqda")
with my_context():
print("Ichida ishlayapti")