🔹 reduce() — Bitta qiymatgacha qisqartiradi
📌 Sintaksis:
• function — ikkita argument qabul qiladi, ulardan bitta natija qaytaradi
• iterable — ustida amallar bajariladi
✅ Misol:
Nima bo‘ldi bu yerda?
• 1 + 2 → 3
• 3 + 3 → 6
• 6 + 4 → 10
Ya’ni barcha elementlarni bosqichma-bosqich yig‘ib bordi
📌 Sintaksis:
from functools import reduce
reduce(function, iterable)
• function — ikkita argument qabul qiladi, ulardan bitta natija qaytaradi
• iterable — ustida amallar bajariladi
✅ Misol:
from functools import reduce
numbers = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, numbers)
print(total) # 10
Nima bo‘ldi bu yerda?
• 1 + 2 → 3
• 3 + 3 → 6
• 6 + 4 → 10
Ya’ni barcha elementlarni bosqichma-bosqich yig‘ib bordi
#bilarmidingiz
🕰 Dasturlash tillari va ularning yaratilgan sanalari:
Fortran – 1957 - (Birinchi yuqori darajadagi ilmiy hisoblash tili, IBM tomonidan ishlab chiqilgan)
Lisp – 1958 - (Sun’iy intellekt tadqiqotlari uchun, John McCarthy tomonidan)
COBOL – 1959 - (Biznes dasturlash tili, Grace Hopper va jamoasi)
BASIC – 1964 - (O‘quvchilar va yangi boshlovchilar uchun qulay til)
C – 1972 - (Dennis Ritchie, Bell Labs; UNIX operatsion tizimini yaratishda ishlatilgan)
SQL – 1978 - (Ma’lumotlar bazasi bilan ishlash tili, IBM tomonidan)
C++ – 1983 - (Bjarne Stroustrup, C tilining obyektga yo‘naltirilgan kengaytmasi)
Perl – 1987 - (Larry Wall, matnlarni qayta ishlash uchun)
Python – 1991 - (Guido van Rossum, sodda va o‘qilishi oson sintaksis)
Visual Basic – 1991 - (Microsoft tomonidan GUI dasturlar uchun)
Ruby – 1995 - (Yukihiro Matsumoto, oddiylik va inson uchun qulaylikni maqsad qilgan)
Java – 1995 - (Sun Microsystems, platformadan mustaqil “Write once, run anywhere”)
JavaScript – 1995 - (Brendan Eich, brauzer uchun skript tili sifatida)
PHP – 1995 - (Rasmus Lerdorf, web-sahifalar uchun dinamik skript)
C# – 2000 - (Microsoft, .NET platformasi uchun)
Scala – 2004 -(Martin Odersky, funksional + obyektga yo‘naltirilgan)
Go (Golang) – 2009 - (Google muhandislari yaratgan, soddalik va samaradorlik uchun)
Rust – 2010 - (Mozilla, xavfsizlik va tezlik uchun)
Kotlin – 2011 - (JetBrains, Java bilan to‘liq moslashuvchi, Android uchun rasmiy til sifatida)
Swift – 2014 -(Apple, iOS va macOS dasturlash uchun)
🕰 Dasturlash tillari va ularning yaratilgan sanalari:
Fortran – 1957 - (Birinchi yuqori darajadagi ilmiy hisoblash tili, IBM tomonidan ishlab chiqilgan)
Lisp – 1958 - (Sun’iy intellekt tadqiqotlari uchun, John McCarthy tomonidan)
COBOL – 1959 - (Biznes dasturlash tili, Grace Hopper va jamoasi)
BASIC – 1964 - (O‘quvchilar va yangi boshlovchilar uchun qulay til)
C – 1972 - (Dennis Ritchie, Bell Labs; UNIX operatsion tizimini yaratishda ishlatilgan)
SQL – 1978 - (Ma’lumotlar bazasi bilan ishlash tili, IBM tomonidan)
C++ – 1983 - (Bjarne Stroustrup, C tilining obyektga yo‘naltirilgan kengaytmasi)
Perl – 1987 - (Larry Wall, matnlarni qayta ishlash uchun)
Python – 1991 - (Guido van Rossum, sodda va o‘qilishi oson sintaksis)
Visual Basic – 1991 - (Microsoft tomonidan GUI dasturlar uchun)
Ruby – 1995 - (Yukihiro Matsumoto, oddiylik va inson uchun qulaylikni maqsad qilgan)
Java – 1995 - (Sun Microsystems, platformadan mustaqil “Write once, run anywhere”)
JavaScript – 1995 - (Brendan Eich, brauzer uchun skript tili sifatida)
PHP – 1995 - (Rasmus Lerdorf, web-sahifalar uchun dinamik skript)
C# – 2000 - (Microsoft, .NET platformasi uchun)
Scala – 2004 -(Martin Odersky, funksional + obyektga yo‘naltirilgan)
Go (Golang) – 2009 - (Google muhandislari yaratgan, soddalik va samaradorlik uchun)
Rust – 2010 - (Mozilla, xavfsizlik va tezlik uchun)
Kotlin – 2011 - (JetBrains, Java bilan to‘liq moslashuvchi, Android uchun rasmiy til sifatida)
Swift – 2014 -(Apple, iOS va macOS dasturlash uchun)
@dataclass — Ma'lumotlar sinfi
Pythonda strukturaviy ma'lumotlar yaratishda sodda va aniq klass.
✅ Afzalliklari:
• Avtomatik init, repr, eq
• Mutable (o‘zgartiriladi)
• Valideytorlar bilan osongina kengaytiriladi
❌ Kamchiligi:
• Katta obyektlar uchun xotira unchalik tejamli emas
Pythonda strukturaviy ma'lumotlar yaratishda sodda va aniq klass.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User("Ali", 25)
print(u.name) # Ali
✅ Afzalliklari:
• Avtomatik init, repr, eq
• Mutable (o‘zgartiriladi)
• Valideytorlar bilan osongina kengaytiriladi
❌ Kamchiligi:
• Katta obyektlar uchun xotira unchalik tejamli emas
🧊 Lug‘atni “𝐦𝐮𝐳𝐥𝐚𝐭𝐢𝐬𝐡”: 𝐭𝐲𝐩𝐞𝐬.𝐌𝐚𝐩𝐩𝐢𝐧𝐠𝐏𝐫𝐨𝐱𝐲𝐓𝐲𝐩𝐞
Ba’zan lug‘atni o‘zgartirib bo‘lmaydigan holatda uzatish kerak bo‘ladi — shunda hech kim uni tasodifan tahrir qila olmaydi.
Buning uchun 𝐭𝐲𝐩𝐞𝐬 modulidagi 𝐌𝐚𝐩𝐩𝐢𝐧𝐠𝐏𝐫𝐨𝐱𝐲𝐓𝐲𝐩𝐞 yordam beradi.
𝐨𝐫𝐢𝐠𝐢𝐧𝐚𝐥 lug‘atni o‘zgartirish mumkin
𝐟𝐫𝐨𝐳𝐞𝐧 nusxasini esa — mumkin emas
🎯 Xulosa
𝐌𝐚𝐩𝐩𝐢𝐧𝐠𝐏𝐫𝐨𝐱𝐲𝐓𝐲𝐩𝐞 — o‘zgarishlardan himoyalangan “lug‘at-qobiq” yaratish usuli. API va konfiguratsiyalar bilan ishlashda juda foydali.
Ba’zan lug‘atni o‘zgartirib bo‘lmaydigan holatda uzatish kerak bo‘ladi — shunda hech kim uni tasodifan tahrir qila olmaydi.
Buning uchun 𝐭𝐲𝐩𝐞𝐬 modulidagi 𝐌𝐚𝐩𝐩𝐢𝐧𝐠𝐏𝐫𝐨𝐱𝐲𝐓𝐲𝐩𝐞 yordam beradi.
𝐨𝐫𝐢𝐠𝐢𝐧𝐚𝐥 lug‘atni o‘zgartirish mumkin
𝐟𝐫𝐨𝐳𝐞𝐧 nusxasini esa — mumkin emas
🎯 Xulosa
𝐌𝐚𝐩𝐩𝐢𝐧𝐠𝐏𝐫𝐨𝐱𝐲𝐓𝐲𝐩𝐞 — o‘zgarishlardan himoyalangan “lug‘at-qobiq” yaratish usuli. API va konfiguratsiyalar bilan ishlashda juda foydali.
🔥2
📌 PYTHONDA MEMORY LEAK — KO‘RINMAS DUSHMAN
— Pythonda ham memory leak bo‘lishi mumkinmi?
🧠 Memory leak (xotira sizishi) — bu dastur ishlashni tugatmaguncha yoki crash bo‘lmaguncha, keraksiz obyektlar xotirada saqlanib qolishi holatidir.
Ko‘pchilik Python foydalanuvchilari "garbage collector bor-ku" deb o‘ylaydi. To‘g‘ri, Python avtomatik xotirani tozalaydi, ammo noto‘g‘ri yozilgan kod garbage collectorga halal beradi va memory leak yuz beradi.
❓ Qanday qilib memory leak yuz beradi?
1. 🔁 Circular reference
Ikkita obyekt bir-birini ko‘rsatsa:
Bu yerda a → b → a bog‘lanishi bor. Hatto del a, del b desangiz ham ular tozalanmaydi.
2. 🧷 Global o‘zgaruvchilar yoki singleton obyektlar
Katta ma’lumotlar saqlanadigan obyektni global holatda saqlasangiz, xotira hech qachon bo‘shamaydi.
3. 📣 Signal-slot / Event listener unutib qo‘yilishi (PyQt, Tkinter)
PyQt misol:
Signal ulanishi uzilmasa, widget yopilsa ham u obyekt xotirada qoladi.
4. 🗂 Faollikda qolgan fayllar, soketlar yoki resurslar
Faylni ochib, close() qilmasangiz yoki with dan foydalanmasangiz:
5. 🧭 WeakRef ishlatilmasligi kerak joyda
Katta obyektlar referenceda turib qoladi, ularni weakref bilan ushlab turish kerak bo‘lsa-da, oddiy reference qilingan bo‘lishi mumkin.
— Pythonda ham memory leak bo‘lishi mumkinmi?
🧠 Memory leak (xotira sizishi) — bu dastur ishlashni tugatmaguncha yoki crash bo‘lmaguncha, keraksiz obyektlar xotirada saqlanib qolishi holatidir.
Ko‘pchilik Python foydalanuvchilari "garbage collector bor-ku" deb o‘ylaydi. To‘g‘ri, Python avtomatik xotirani tozalaydi, ammo noto‘g‘ri yozilgan kod garbage collectorga halal beradi va memory leak yuz beradi.
❓ Qanday qilib memory leak yuz beradi?
1. 🔁 Circular reference
Ikkita obyekt bir-birini ko‘rsatsa:
class A:
def __init__(self):
self.b = None
class B:
def __init__(self):
self.a = None
a = A()
b = B()
a.b = b
b.a = a
Bu yerda a → b → a bog‘lanishi bor. Hatto del a, del b desangiz ham ular tozalanmaydi.
2. 🧷 Global o‘zgaruvchilar yoki singleton obyektlar
Katta ma’lumotlar saqlanadigan obyektni global holatda saqlasangiz, xotira hech qachon bo‘shamaydi.
3. 📣 Signal-slot / Event listener unutib qo‘yilishi (PyQt, Tkinter)
PyQt misol:
button.clicked.connect(self.handler)
Signal ulanishi uzilmasa, widget yopilsa ham u obyekt xotirada qoladi.
4. 🗂 Faollikda qolgan fayllar, soketlar yoki resurslar
Faylni ochib, close() qilmasangiz yoki with dan foydalanmasangiz:
f = open("data.txt")
# f.close() yo'q
5. 🧭 WeakRef ishlatilmasligi kerak joyda
Katta obyektlar referenceda turib qoladi, ularni weakref bilan ushlab turish kerak bo‘lsa-da, oddiy reference qilingan bo‘lishi mumkin.
❤1
𝐏𝐲𝐒𝐩𝐚𝐫𝐤 — 𝐤𝐚𝐭𝐭𝐚 𝐡𝐚𝐣𝐦𝐝𝐚𝐠𝐢 𝐦𝐚’𝐥𝐮𝐦𝐨𝐭𝐥𝐚𝐫 𝐛𝐢𝐥𝐚𝐧 𝐢𝐬𝐡𝐥𝐚𝐬𝐡 𝐮𝐜𝐡𝐮𝐧 𝐤𝐮𝐜𝐡𝐥𝐢 𝐯𝐨𝐬𝐢𝐭𝐚
𝐏𝐲𝐒𝐩𝐚𝐫𝐤 — bu 𝐀𝐩𝐚𝐜𝐡𝐞 𝐒𝐩𝐚𝐫𝐤 platformasida Python orqali taqsimlangan hisob-kitoblarni bajarish imkonini beruvchi kutubxona. U katta hajmdagi ma’lumotlarni klasterlar yordamida tez va samarali tarzda qayta ishlash uchun ishlatiladi.
🔧 𝐏𝐲𝐒𝐩𝐚𝐫𝐤 𝐢𝐦𝐤𝐨𝐧𝐢𝐲𝐚𝐭𝐥𝐚𝐫𝐢:
✅ Ma’lumotlar va hisoblashlar avtomatik tarzda klasterdagi tugunlar orasida taqsimlanadi.
✅ Maxsus ma’lumot turlari: 𝐑𝐃𝐃, 𝐃𝐚𝐭𝐚𝐅𝐫𝐚𝐦𝐞, 𝐃𝐚𝐭𝐚𝐬𝐞𝐭 — strukturalashtirilgan ma’lumotlar bilan qulay ishlash imkonini beradi.
✅ Turli saqlash tizimlari va fayl formatlaridan o‘qish va yozishni qo‘llab-quvvatlaydi.
✅ Klassifikatsiya, klasterlash va regressiya uchun ichki 𝐌𝐋 (machine learning) algoritmlari mavjud.
✅ Tushunarli va qulay API — siz uni pandas, numpy kabi kutubxonalar bilan birga ishlata olasiz.
🚀 𝐏𝐲𝐒𝐩𝐚𝐫𝐤 — katta hajmdagi ma’lumotlar (big data) va mashinali o‘rganish (ML) sohasida tezkor va samarali yechim
𝐏𝐲𝐒𝐩𝐚𝐫𝐤 — bu 𝐀𝐩𝐚𝐜𝐡𝐞 𝐒𝐩𝐚𝐫𝐤 platformasida Python orqali taqsimlangan hisob-kitoblarni bajarish imkonini beruvchi kutubxona. U katta hajmdagi ma’lumotlarni klasterlar yordamida tez va samarali tarzda qayta ishlash uchun ishlatiladi.
🔧 𝐏𝐲𝐒𝐩𝐚𝐫𝐤 𝐢𝐦𝐤𝐨𝐧𝐢𝐲𝐚𝐭𝐥𝐚𝐫𝐢:
✅ Ma’lumotlar va hisoblashlar avtomatik tarzda klasterdagi tugunlar orasida taqsimlanadi.
✅ Maxsus ma’lumot turlari: 𝐑𝐃𝐃, 𝐃𝐚𝐭𝐚𝐅𝐫𝐚𝐦𝐞, 𝐃𝐚𝐭𝐚𝐬𝐞𝐭 — strukturalashtirilgan ma’lumotlar bilan qulay ishlash imkonini beradi.
✅ Turli saqlash tizimlari va fayl formatlaridan o‘qish va yozishni qo‘llab-quvvatlaydi.
✅ Klassifikatsiya, klasterlash va regressiya uchun ichki 𝐌𝐋 (machine learning) algoritmlari mavjud.
✅ Tushunarli va qulay API — siz uni pandas, numpy kabi kutubxonalar bilan birga ishlata olasiz.
🚀 𝐏𝐲𝐒𝐩𝐚𝐫𝐤 — katta hajmdagi ma’lumotlar (big data) va mashinali o‘rganish (ML) sohasida tezkor va samarali yechim
🧹 Barcha raqamlardan tashqari belgilarni olib tashlash: 𝐫𝐞.𝐬𝐮𝐛()
Agar matnda faqat raqamlar qolgani kerak boʻlsa (masalan, telefon raqamlari, IDlar va h.k.), 𝐫𝐞.𝐬𝐮𝐛() bu vazifani elegant tarzda bajaradi.
🎯 Natija
𝐫𝐞.𝐬𝐮𝐛(𝐫"\𝐃", "", text) — bu satr ichidan raqamlardan tashqari hamma narsani olib tashlashning tez va oddiy usuli. Telefon raqamlari va IDlar bilan ishlashda ayniqsa foydali.
Agar matnda faqat raqamlar qolgani kerak boʻlsa (masalan, telefon raqamlari, IDlar va h.k.), 𝐫𝐞.𝐬𝐮𝐛() bu vazifani elegant tarzda bajaradi.
🎯 Natija
𝐫𝐞.𝐬𝐮𝐛(𝐫"\𝐃", "", text) — bu satr ichidan raqamlardan tashqari hamma narsani olib tashlashning tez va oddiy usuli. Telefon raqamlari va IDlar bilan ishlashda ayniqsa foydali.
🚀 Ruff — chaqqon va zamonaviy Python linteri
Agar siz Python kodini toza, tartibli va professional saqlamoqchi bo‘lsangiz, yangi vosita — Ruff bilan tanishing. U tezligi, ishonchliligi va keng imkoniyatlari bilan mashhur bo‘lib, flake8 va isort o‘rnini bosishga qodir.
⚡️ Tezlik — asosiy afzallik
Ruff linteri Rust tilida yozilgan bo‘lib, u 10–100 baravar tezroq ishlaydi!
Bu nafaqat vaqtni tejaydi, balki katta loyihalarda doimiy foydalanishga imkon yaratadi.
🎯 Asosiy xususiyatlar:
✅ flake8 qoida to‘plamiga to‘liq mos keladi
✅ Mashhur plaginlar (masalan, flake8-bugbear) funksiyalarini o‘zida jamlagan
✅ Black bilan avtomatik moslashadi — formatlashda hech qanday ziddiyat yo‘q
✅ Keraksiz importlarni avtomatik olib tashlaydi
✅ Importlarni isort uslubida tartiblaydi — guruhlab, alfavit tartibida joylashtiradi
Ruff quyidagilarni avtomatik bajara oladi:
- Qaytarilmagan importlarni o‘chiradi
- Koddagi noaniq yoki xavfli ifodalarni aniqlaydi
- Kodni
🔧 O‘rnatish:
Va tekshirish uchun:
Kodda avtomatik tozalash:
🔚 Ruff — bu nafaqat tez, balki aqlli va zamonaviy linter.
U Python dunyosidagi yangi standartka aylanmoqda.
Agar sizga professional tarzda kod yozish muhim bo‘lsa — Ruff’ni sinab ko‘ring!
Agar siz Python kodini toza, tartibli va professional saqlamoqchi bo‘lsangiz, yangi vosita — Ruff bilan tanishing. U tezligi, ishonchliligi va keng imkoniyatlari bilan mashhur bo‘lib, flake8 va isort o‘rnini bosishga qodir.
⚡️ Tezlik — asosiy afzallik
Ruff linteri Rust tilida yozilgan bo‘lib, u 10–100 baravar tezroq ishlaydi!
Bu nafaqat vaqtni tejaydi, balki katta loyihalarda doimiy foydalanishga imkon yaratadi.
🎯 Asosiy xususiyatlar:
✅ flake8 qoida to‘plamiga to‘liq mos keladi
✅ Mashhur plaginlar (masalan, flake8-bugbear) funksiyalarini o‘zida jamlagan
✅ Black bilan avtomatik moslashadi — formatlashda hech qanday ziddiyat yo‘q
✅ Keraksiz importlarni avtomatik olib tashlaydi
✅ Importlarni isort uslubida tartiblaydi — guruhlab, alfavit tartibida joylashtiradi
Ruff quyidagilarni avtomatik bajara oladi:
- Qaytarilmagan importlarni o‘chiradi
- Koddagi noaniq yoki xavfli ifodalarni aniqlaydi
- Kodni
PEP8 talablariga moslab formatlaydi🔧 O‘rnatish:
pip install ruff
Va tekshirish uchun:
ruff check my_project/
Kodda avtomatik tozalash:
ruff check . --fix
🔚 Ruff — bu nafaqat tez, balki aqlli va zamonaviy linter.
U Python dunyosidagi yangi standartka aylanmoqda.
Agar sizga professional tarzda kod yozish muhim bo‘lsa — Ruff’ni sinab ko‘ring!
🛠 𝐕𝐨𝐥𝐮𝐩𝐭𝐮𝐨𝐮𝐬 — Python’da ma’lumotlarni tekshirish (validatsiya) kutubxonasi
𝐕𝐨𝐥𝐮𝐩𝐭𝐮𝐨𝐮𝐬 — bu kiruvchi ma’lumotlarni 𝐯𝐚𝐥𝐢𝐝𝐚𝐭𝐬𝐢𝐲𝐚 qilish uchun ishlatiladigan Python kutubxonasi.
U HTTP-so‘rovlar ma’lumotlarini yoki dastur ichidagi mavjud 𝐦𝐚’𝐥𝐮𝐦𝐨𝐭 𝐬𝐭𝐫𝐮𝐤𝐭𝐮𝐫𝐚𝐥𝐚𝐫𝐢𝐧𝐢 tekshirishda qo‘llaniladi.
📌 𝐌𝐢𝐬𝐨𝐥:
Biz quyidagi sxemani yaratamiz:
- 𝐧𝐚𝐦𝐞 — majburiy 𝐤𝐞𝐲, kamida 1 belgidan iborat 𝐬𝐭𝐫𝐢𝐧𝐠 bo‘lishi kerak.
- 𝐚𝐠𝐞 — majburiy emas, lekin agar bo‘lsa, u 𝐢𝐧𝐭 bo‘lishi va qiymati 18 dan kichik bo‘lmasligi kerak.
🔹 Agar ma’lumotlar sxemaga mos bo‘lsa — ular o‘zgarishsiz qaytariladi.
🔹 Agar mos kelmasa — 𝐕𝐨𝐥𝐮𝐩𝐭𝐮𝐨𝐮𝐬 xato (exception) chiqaradi.
💡 Foydali: 𝐕𝐨𝐥𝐮𝐩𝐭𝐮𝐨𝐮𝐬 murakkab ma’lumot tuzilmalarini ham oson tekshiradi, shuningdek 𝐧𝐞𝐬𝐭𝐞𝐝 (ichma-ich) validatsiyani qo‘llab-quvvatlaydi.
𝐕𝐨𝐥𝐮𝐩𝐭𝐮𝐨𝐮𝐬 — bu kiruvchi ma’lumotlarni 𝐯𝐚𝐥𝐢𝐝𝐚𝐭𝐬𝐢𝐲𝐚 qilish uchun ishlatiladigan Python kutubxonasi.
U HTTP-so‘rovlar ma’lumotlarini yoki dastur ichidagi mavjud 𝐦𝐚’𝐥𝐮𝐦𝐨𝐭 𝐬𝐭𝐫𝐮𝐤𝐭𝐮𝐫𝐚𝐥𝐚𝐫𝐢𝐧𝐢 tekshirishda qo‘llaniladi.
📌 𝐌𝐢𝐬𝐨𝐥:
Biz quyidagi sxemani yaratamiz:
- 𝐧𝐚𝐦𝐞 — majburiy 𝐤𝐞𝐲, kamida 1 belgidan iborat 𝐬𝐭𝐫𝐢𝐧𝐠 bo‘lishi kerak.
- 𝐚𝐠𝐞 — majburiy emas, lekin agar bo‘lsa, u 𝐢𝐧𝐭 bo‘lishi va qiymati 18 dan kichik bo‘lmasligi kerak.
🔹 Agar ma’lumotlar sxemaga mos bo‘lsa — ular o‘zgarishsiz qaytariladi.
🔹 Agar mos kelmasa — 𝐕𝐨𝐥𝐮𝐩𝐭𝐮𝐨𝐮𝐬 xato (exception) chiqaradi.
💡 Foydali: 𝐕𝐨𝐥𝐮𝐩𝐭𝐮𝐨𝐮𝐬 murakkab ma’lumot tuzilmalarini ham oson tekshiradi, shuningdek 𝐧𝐞𝐬𝐭𝐞𝐝 (ichma-ich) validatsiyani qo‘llab-quvvatlaydi.
🧩 Mixins – yordamchi funksiyalarni boshqa classlarga qo‘shish
Mixin — bu classlarga qo‘shimcha imkoniyat beruvchi yordamchi sinflar. Odatda mixinlar mustaqil ishlamaydi, ular boshqa classlar bilan birga ishlatiladi.
Yuqoridagi kodda LogMixin faqatgina log() funksiyani beradi, asosiy ishni User qiladi. Juda qulay!
Mixin — bu classlarga qo‘shimcha imkoniyat beruvchi yordamchi sinflar. Odatda mixinlar mustaqil ishlamaydi, ular boshqa classlar bilan birga ishlatiladi.
Yuqoridagi kodda LogMixin faqatgina log() funksiyani beradi, asosiy ishni User qiladi. Juda qulay!
🔍 Pythonda objgraph: Memory leak va obyektlar tahlili uchun super qurol
📦 objgraph — bu Pythonda obyektlar sonini vizual va dinamik tarzda kuzatish imkonini beruvchi kutubxona. Ayniqsa, memory leak (xotiraning tozalanmasligi) muammosini aniqlashda juda foydali.
❓ Nima uchun kerak?
Ayrim holatlarda:
• list, dict, class obyektlari soni kutilganidan ortib boradi,
• GC (garbage collector) ularni tozalamaydi,
• Xotira to‘ladi va dastur sekinlashadi yoki “freeze” bo‘ladi.
🔎 objgraph bu obyektlar qaerdan kelayotganini ko‘rsatib beradi!
🚀 O‘rnatish:
✅ Asosiy imkoniyatlar
1. Eng ko‘p nusxadagi obyektlar ro‘yxati:
🧾 Natija (masalan):
🔎 Kim bunchalik ko‘p dict ishlatmoqda? Endi aniqlaymiz.
2. Maxsus klassdan yaratilgan obyektlar soni:
📌 Bu orqali siz MyCustomClass dan nechta obyekt hali ham xotirada turganini bilasiz.
3. Obyektlar orasidagi bog‘lanishlar:
🧠 Bu obyektga kim havola (reference) qilayotganini grafik tarzda ko‘rsatadi.
💡 Foydali: memory leakga sabab bo‘layotgan parent obyektni topish mumkin.
4. Oldingi snapshot bilan taqqoslash:
🔁 Bu sizga obyektlar qaysi joyda ortib borayotganini ko‘rsatadi — har bir ishga tushirishdan so‘ng farqni ko‘rishingiz mumkin.
🔬 Real holat: Memory leakni aniqlash
📸 leak.png faylida Leaky obyektlar qayerdan kelayotganini ko‘rasiz!
📌 Qisqa xulosa:
✅ objgraph sizga:
• Obyektlar sonini tahlil qilish,
• Memory leak sabablari topish,
• Vizual grafiklar olish,
• Profiling vaqtida real ko‘makchi bo‘la oladi.
📦 objgraph — bu Pythonda obyektlar sonini vizual va dinamik tarzda kuzatish imkonini beruvchi kutubxona. Ayniqsa, memory leak (xotiraning tozalanmasligi) muammosini aniqlashda juda foydali.
❓ Nima uchun kerak?
Ayrim holatlarda:
• list, dict, class obyektlari soni kutilganidan ortib boradi,
• GC (garbage collector) ularni tozalamaydi,
• Xotira to‘ladi va dastur sekinlashadi yoki “freeze” bo‘ladi.
🔎 objgraph bu obyektlar qaerdan kelayotganini ko‘rsatib beradi!
🚀 O‘rnatish:
pip install objgraph
✅ Asosiy imkoniyatlar
1. Eng ko‘p nusxadagi obyektlar ro‘yxati:
import objgraph
objgraph.show_most_common_types()
🧾 Natija (masalan):
dict 1205
function 512
tuple 433
list 310
🔎 Kim bunchalik ko‘p dict ishlatmoqda? Endi aniqlaymiz.
2. Maxsus klassdan yaratilgan obyektlar soni:
objgraph.count('MyCustomClass')
📌 Bu orqali siz MyCustomClass dan nechta obyekt hali ham xotirada turganini bilasiz.
3. Obyektlar orasidagi bog‘lanishlar:
objgraph.show_backrefs([my_obj], filename='backrefs.png')
🧠 Bu obyektga kim havola (reference) qilayotganini grafik tarzda ko‘rsatadi.
💡 Foydali: memory leakga sabab bo‘layotgan parent obyektni topish mumkin.
4. Oldingi snapshot bilan taqqoslash:
import objgraph
objgraph.show_growth()
🔁 Bu sizga obyektlar qaysi joyda ortib borayotganini ko‘rsatadi — har bir ishga tushirishdan so‘ng farqni ko‘rishingiz mumkin.
🔬 Real holat: Memory leakni aniqlash
import objgraph
class Leaky:
pass
objs = []
def make_leak():
for _ in range(100):
objs.append(Leaky())
make_leak()
objgraph.show_most_common_types()
objgraph.show_backrefs([objs[-1]], filename='leak.png')
📸 leak.png faylida Leaky obyektlar qayerdan kelayotganini ko‘rasiz!
📌 Qisqa xulosa:
✅ objgraph sizga:
• Obyektlar sonini tahlil qilish,
• Memory leak sabablari topish,
• Vizual grafiklar olish,
• Profiling vaqtida real ko‘makchi bo‘la oladi.
Metaclass (Metasinflar)
Metaclass nima?
• Metaclass — bu klasslarni yaratadigan klass.
• Klasslar obyekt yaratadi, metaklass esa klassni yaratadi.
Oddiy misol:
Natija:
Foydali joylari:
• Klass yaratilishida avtomatik tekshiruvlar yoki o‘zgartirishlar kiritish.
• ORM tizimlarida (SQLAlchemy, Django Models) foydalaniladi.
Batafsil komentariyada 👇
Metaclass nima?
• Metaclass — bu klasslarni yaratadigan klass.
• Klasslar obyekt yaratadi, metaklass esa klassni yaratadi.
Oddiy misol:
class MyMeta(type):
def __new__(cls, name, bases, dct):
print(f"Klass yaratilmoqda: {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=MyMeta):
pass
Natija:
Klass yaratilmoqda: MyClass
Foydali joylari:
• Klass yaratilishida avtomatik tekshiruvlar yoki o‘zgartirishlar kiritish.
• ORM tizimlarida (SQLAlchemy, Django Models) foydalaniladi.
Batafsil komentariyada 👇
Klass registry — barcha subclasslarni ro‘yxatga olish
Tasavvur qiling siz ishlatgan hamma klasslaringiz ro'yxatini yaratmoqchisiz va buning imkoni bor, metaclass yordamida:
Bu yondashuv plagin tizimlari yoki avtomatik yuklovchilar uchun ishlatiladi.
Tasavvur qiling siz ishlatgan hamma klasslaringiz ro'yxatini yaratmoqchisiz va buning imkoni bor, metaclass yordamida:
class RegistryMeta(type):
registry = []
def __new__(cls, name, bases, attrs):
new_cls = super().__new__(cls, name, bases, attrs)
cls.registry.append(new_cls)
return new_cls
class Base(metaclass=RegistryMeta):
pass
class A(Base): pass
class B(Base): pass
print(RegistryMeta.registry) # [<class '__main__.Base'>, <class '__main__.A'>, <class '__main__.B'>]
Bu yondashuv plagin tizimlari yoki avtomatik yuklovchilar uchun ishlatiladi.
Klass atributlarini tekshirish
Tasavvur qiling siz qandaydir o'xshash klasslar yaratmoqchisiz, va bu klasslarda qaysidir atribut (masalan: my_attr) ishlatilishi majburiy, lekin ba'zida bu atributni ishlatish esingizdan chiqib qoladi va dasturingizda kodning to shu joyi ishlamaguncha xatolik chiqmaydi.
Balki test jarayonida bu joyini sinab ko'rmassiz va project topshirganingizdan keyin chiqar bu muammo. Sizga yechim kerakmi?
Yechim (metaclass orqali)
Bu yerda har qanday klass yaratishda metaclass my_attr bor-yo‘qligini tekshiradi. Juda foydali, ayniqsa yirik frameworklar uchun.
Tasavvur qiling siz qandaydir o'xshash klasslar yaratmoqchisiz, va bu klasslarda qaysidir atribut (masalan: my_attr) ishlatilishi majburiy, lekin ba'zida bu atributni ishlatish esingizdan chiqib qoladi va dasturingizda kodning to shu joyi ishlamaguncha xatolik chiqmaydi.
Balki test jarayonida bu joyini sinab ko'rmassiz va project topshirganingizdan keyin chiqar bu muammo. Sizga yechim kerakmi?
Yechim (metaclass orqali)
class ValidateMeta(type):
def __new__(cls, name, bases, attrs):
if 'my_attr' not in attrs:
raise TypeError(f"{name} klassida 'my_attr' bo'lishi shart!")
return super().__new__(cls, name, bases, attrs)
class ValidClass(metaclass=ValidateMeta):
my_attr = 123 # OK
class InvalidClass(metaclass=ValidateMeta):
pass # ❌ Error: 'my_attr' yo'q
Bu yerda har qanday klass yaratishda metaclass my_attr bor-yo‘qligini tekshiradi. Juda foydali, ayniqsa yirik frameworklar uchun.
🔍 mypy nima?
mypy — bu Python dasturlari uchun static type checker, ya’ni:
• Kodga tiplar yozilgan bo‘lsa, ularni avvaldan tekshiradi.
• Python kutilgan tipga mos kelmaydigan qiymatlar bilan ishlasa — mypy bu haqida xatolikni bajarilmasdan oldin bildiradi.
🧱 Asosiy g‘oya
Python o‘zi:
• Tiplarni dinamik tekshiradi (faqat kod bajarayotganda),
• Lekin bu xatolikni kech bildiradi.
• Siz yozgan typing belgilari orqali, kodni tahlil qilib, int o‘rniga str berilganini oldindan sezadi.
✅ Qanday ishlaydi?
Kod yozasiz:
Noto‘g‘ri chaqirasiz:
Python bajarsa — bu TypeError beradi, lekin kodning xatolik beradigan joyi ishlagandan keyin.
mypy bilan tekshirsangiz:
U quyidagi xatoni ko‘rsatadi:
⚙️ mypyni qanday o‘rnatish?
Terminalda:
mypy — bu Python dasturlari uchun static type checker, ya’ni:
• Kodga tiplar yozilgan bo‘lsa, ularni avvaldan tekshiradi.
• Python kutilgan tipga mos kelmaydigan qiymatlar bilan ishlasa — mypy bu haqida xatolikni bajarilmasdan oldin bildiradi.
🧱 Asosiy g‘oya
Python o‘zi:
• Tiplarni dinamik tekshiradi (faqat kod bajarayotganda),
• Lekin bu xatolikni kech bildiradi.
mypy esa:• Siz yozgan typing belgilari orqali, kodni tahlil qilib, int o‘rniga str berilganini oldindan sezadi.
✅ Qanday ishlaydi?
Kod yozasiz:
def greet(name: str) -> str:
return "Salom, " + name
Noto‘g‘ri chaqirasiz:
greet(123)
Python bajarsa — bu TypeError beradi, lekin kodning xatolik beradigan joyi ishlagandan keyin.
mypy bilan tekshirsangiz:
mypy file.py
U quyidagi xatoni ko‘rsatadi:
error: Argument 1 to "greet" has incompatible type "int"; expected "str"
⚙️ mypyni qanday o‘rnatish?
Terminalda:
pip install mypy
❤1
🎓 Ilmiy grafiklar uchun mukammal yechim – SciencePlots!
Pythonda grafiklar chizasizmi? Ularni ilmiy maqolalar yoki taqdimotlarga tayyor holatga keltirishni istaysizmi?
📊 SciencePlots — bu Matplotlib uchun ajoyib style kutubxonasi bo‘lib, grafiklaringizni professional ko‘rinishga keltiradi!
👨🔬 Foydali kimlar uchun?
• Olimlar
• Muhandislar
• Talabalar
• Ilmiy ish qilayotgan dasturchilar
🔗 Kutubxona: scienceplots
👉 Grafiklaringiz endi nafaqat foydali, balki chiroyli ham bo‘ladi!
Pythonda grafiklar chizasizmi? Ularni ilmiy maqolalar yoki taqdimotlarga tayyor holatga keltirishni istaysizmi?
📊 SciencePlots — bu Matplotlib uchun ajoyib style kutubxonasi bo‘lib, grafiklaringizni professional ko‘rinishga keltiradi!
👨🔬 Foydali kimlar uchun?
• Olimlar
• Muhandislar
• Talabalar
• Ilmiy ish qilayotgan dasturchilar
🔗 Kutubxona: scienceplots
👉 Grafiklaringiz endi nafaqat foydali, balki chiroyli ham bo‘ladi!
👍1
🧠🐍 Pythonda funksiyani avtomatik tezlashtirish – lru_cache bilan!
Ayniqsa hisob-kitobli, rekursiv, yoki ko‘p chaqiriladigan funksiyalaringiz bormi?
Unda siz uchun yechim:
⚡️ @lru_cache — natijani eslab qoladi, hisoblashni takrorlamaydi!
✅ Afzalliklari:
• Funksiya tez ishlaydi
• Hisoblash resursini tejaydi
• Kodni oddiy dekorator bilan optimallashtirasiz
📊 Statistikani ham ko‘rish mumkin:
🎯 Natija:
• hits: necha marta keshdan foydalandi
• misses: necha marta hisoblashga to‘g‘ri keldi
✅ lru_cache — bu faqat dekorator qo‘shish orqali katta yutuq!
Ayniqsa hisob-kitobli, rekursiv, yoki ko‘p chaqiriladigan funksiyalaringiz bormi?
Unda siz uchun yechim:
⚡️ @lru_cache — natijani eslab qoladi, hisoblashni takrorlamaydi!
✅ Afzalliklari:
• Funksiya tez ishlaydi
• Hisoblash resursini tejaydi
• Kodni oddiy dekorator bilan optimallashtirasiz
📊 Statistikani ham ko‘rish mumkin:
print(kvadrat.cache_info())
🎯 Natija:
• hits: necha marta keshdan foydalandi
• misses: necha marta hisoblashga to‘g‘ri keldi
✅ lru_cache — bu faqat dekorator qo‘shish orqali katta yutuq!
Media is too big
VIEW IN TELEGRAM
Stelvio v0.3.0 allaqachon shu yerda!
Python-ilovani AWSda joylashtirishning eng oddiy usuli.
Faqat Python.
YAML yo‘q. JSON yo‘q. AWS Console’da sichqoncha bosish yo‘q.
✓ Oldindan sozlashsiz CLI
✓ Muhitlarni qo‘llab-quvvatlash
Qarang, API ni bo‘sh papkadan qanday ishga tushirish mumkin — 60 soniyadan kam vaqt ichida.
dokumentatsiyasi: https://docs.stelvio.dev
GitHub: https://github.com/michal-stlv/stelvio/
Python-ilovani AWSda joylashtirishning eng oddiy usuli.
Faqat Python.
YAML yo‘q. JSON yo‘q. AWS Console’da sichqoncha bosish yo‘q.
✓ Oldindan sozlashsiz CLI
✓ Muhitlarni qo‘llab-quvvatlash
Qarang, API ni bo‘sh papkadan qanday ishga tushirish mumkin — 60 soniyadan kam vaqt ichida.
dokumentatsiyasi: https://docs.stelvio.dev
GitHub: https://github.com/michal-stlv/stelvio/