Isoqjanov Ilyos | Python
512 subscribers
34 photos
13 videos
2 files
60 links
🐍 Python bo'yicha o'zbek tilidagi sifatli materiallarni ko'paytirishda o'zing madadkor bo'lgin Allohim.

Shaxsiy blogim:
https://t.me/coldboot_blog

Admin:
@JurabekAbdusattarov,
@pythonwithcoldboot
Download Telegram
#dependencyInjection_DI
📌 Dependency Injection (DI) — nima?


🧩 DI — oddiy tushuntirish
“Kerakli narsa funksiyaning ichida yaratilmaydi, balki tashqaridan uzatiladi.”

Bu yondashuvn natijasida:
Kod aniq va soddalashadi
Test qilish osonlashadi
Har bir modul mustaqil bo‘ladi

Qattiq bog‘liq kod:


def print_invoice():
printer = HPPrinter() # bu yerda printer turi qattiq belgilangan
printer.print()

DI bilan:

def print_invoice(printer):
printer.print()

# So‘ngra istalgan printerni uzatamiz:
print_invoice(HPPrinter())
print_invoice(EpsonPrinter())


Shunday qilib, funksiyani o‘zgartirmasdan turli variantlar bilan ishlatish mumkin.

Foydali bo'lgan postlarda reaksiya qoldirish va ularni do'stlarga ulashishni unutmang😁!
Batafsil: komentda tushuntiriladi!👇
🔍 DI qayerlarda ishlatiladi?

Python:
•  FastAPI — Depends() orqali
•  Flask — o‘zida yo‘q, lekin Flask-Injector, Flask-DI orqali qo‘shish mumkin
•  Django — ichki DI yo‘q, lekin Class-based Views, middleware orqali modullashtirish mumkin

Java / Kotlin:
•  Spring Framework
— dunyodagi eng mashhur DI tizimlaridan biri, @Autowired, @Service bilan ishlaydi

.NET (C#):
• 
ASP.NET Core — AddTransient, AddScoped, AddSingleton orqali DI konteyner ishlaydi

JavaScript / TypeScript:
•  NestJS — Angular'dan ilhomlangan, DI markaziy qismida joylashgan
•  Angular — frontendda lekin kuchli DI tizimi bor

Go (Golang):
•  Ichki DI yo‘q, lekin wire, fx, dig kabi kutubxonalar orqali amalga oshiriladi

🧠 Aslida DI nima uchun muhim?
•  Katta loyihalarda kod ajratilishi va soddaligi uchun
•  Har bir qismni alohida test qilish uchun
•  Kodni o‘zgartirmasdan moslashtirish uchun (ya’ni plug-and-play logika)

📌 Xulosa:
❗️ **Dependency Injection — bu frameworkga emas, toza va professional dasturlashga tegishli yondashuvdir.

Foydali bo'lgan postlarda reaksiya qoldirish va ularni do'stlarga ulashishni unutmang😁!
Komentda misol keltiriladi tushuntiriladi!👇
🧩 Interface — bu nima?

Interface — bu dasturda qanday funksiyalar bo‘lishi kerakligini belgilovchi shartnoma (contract). Ya'ni:

🔹 "Bu klassda falon-falon metodlar bo'lishi shart, lekin bu metodlar qanday ishlashi muhim emas."

🧠 Sodda qilib tushuntirsak:
Interface — bu "nimalar qilish kerakligini" belgilaydi, "qanday qilishini" esa subklass hal qiladi.

🔒 Nega kerak?

1. Katta loyihalarda strukturani qat’iy ushlab turadi
2. Polimorfizmni qo‘llaydi — bir xil metodlar bilan turli obyektlarni boshqarish.
3. Har xil implementatsiyalarni ajratib beradi


Foydali bo'lgan postlarda reaksiya qoldirish va ularni do'stlarga ulashishni unutmang😁!
Batafsil: komentda tushuntiriladi!👇
🔥1
🔹 map() funksiyasi nima qiladi?

map() — bu Higher-Order Function bo‘lib, biror funksiyani har bir elementga qo‘llab, yangi natijalar ketma-ketligini (iterable) hosil qiladi.

📌 Sintaksisi:

map(function, iterable)

• function — har bir elementga qo‘llaniladigan funksiya (masalan: lambda, yoki oldindan yozilgan funksiya)
• iterable — ro‘yxat (list), to‘plam (tuple), va hokazo

Misol:

numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2, numbers)

print(list(squared)) # [1, 4, 9, 16]


Nima bo‘ldi bu yerda?

• lambda x: x**2 — bu funksiya har bir sonni kvadrat qiladi
• map(...) — bu funksiyani ro‘yxatdagi har bir elementga qo‘lladi
• list(...) — map obyekti iterable bo‘lgani uchun, uni listga aylantirdik

💡 Qachon ishlatiladi?

• Ro‘yxatdagi har bir elementni o‘zgartirmoqchi bo‘lsangiz
• Kodni toza va ixcham yozmoqchi bo‘lsangiz
• for sikliga alternativ sifatida
🧠 tracemalloc — Pythonda xotira sarfini kuzatish vositasi

Python dasturingizda qaysi joy eng ko‘p RAM yeyapti?
Yoki memory leak borligini qanday aniqlaysiz?

🎯 Javob: tracemalloc bilan!

🔍 tracemalloc bu nima?

tracemalloc — bu Python standarti ichidagi (🔹 built-in) modul bo‘lib, u dastur ishlayotganda obyektlar xotiraga qanday joylashayotganini aniqlab beradi.
Python 3.4+ versiyalarida mavjud.

⚙️ Asosiy imkoniyatlari:
Xotira sarfini qadam-baqadam kuzatish
Har bir obyektni qayerda yaratilganini aniqlash
Snapshotlar (xotira "suratlari") orqali farqni ko‘rish
Debug va profiling paytida memory leakni aniqlash

🔎 Real foydalanish holati

import tracemalloc

tracemalloc.start()

def build_list():
return [i for i in range(100000)]

build_list()

snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')

for stat in top_stats[:3]:
print(stat)

📈 Shu orqali siz kodni optimallashtirishga zarurat bor-yo‘qligini bilasiz.

📊 Natijada siz quyidagiga o'xshash ma’lumot olasiz (bu misol tariqasida):

/home/user/my_script.py:23: size=2.4 MiB, count=30000, average=84 B
/home/user/lib/utils.py:89: size=1.1 MiB, count=14000, average=80 B
...

Har bir qator (line) nechta obyekt va qancha xotira ishlatayotgani ko‘rsatiladi.


🔐 Foydali xususiyatlar:
🔹 tracemalloc.get_traced_memory() — hozirgi va maksimal xotira ishlatish
🔹 filter_traces() — keraksiz modul yoki fayllarni chiqarib tashlash
🔹 traceback.format() — obyektlar qaerdan kelganini aniqlash
1👍1
#singleton_design_pattern
📌 Singleton Design Pattern (Python misolida)


💡 Asosiy g‘oya:
Bir sinfdan faqat bitta obyekt yaratiladi va unga butun dastur bo‘ylab nazoratli kirish ta’minlanadi.

Foydalari:

Nazoratli kirish — faqat bitta obyekt yaratiladi va unga boshqaruv markazlashgan bo‘ladi.
Global o‘zgaruvchilarni kamaytiradi — nomlar bo‘shlig‘ini toza saqlaydi.
Moslashuvchanlik — kerak bo‘lsa, sinfni meros qilib kengaytirish va runtime’da kerakli versiyasini ishlatish mumkin.
Instansiyalar sonini boshqarish — dastlab bitta obyekt bo‘lishi mumkin, keyin istasangiz ko‘proq nusxalarga ruxsat berish oson.
Statik metodlardan ko‘ra moslashuvchan — oson meros olish va polymorphism qo‘llash mumkin.

Python misoli (thread-safe singleton):

import threading

class SingletonMeta(type):
_instance = None
_lock = threading.Lock()

def __call__(cls, *args, **kwargs):
if cls._instance is None:
with cls._lock:
if cls._instance is None:
cls._instance = super().__call__(*args, **kwargs)
return cls._instance

class Config(metaclass=SingletonMeta):
def __init__(self):
self.settings = {}

# Foydalanish
c1 = Config()
c2 = Config()
print(c1 is c2) # True — faqat bitta obyekt


Qisqacha:
Singleton — bu resurslarni tejaydigan va markazlashgan boshqaruv beradigan dizayn patterndir.

Foydali bo'lgan postlarda reaksiya qoldirish va ularni do'stlarga ulashishni unutmang😁!
Batafsil: komentda tushuntiriladi!👇
🔹 filter() — Filtrlovchi funksiya

📌 Sintaksis:
filter(function, iterable)


•  function — har bir elementga qo‘llanadi, True yoki False qaytaradi
•  iterable — ro‘yxat, to‘plam, va hokazo

Misol:
numbers = [1, 2, 3, 4, 5, 6]
even = filter(lambda x: x % 2 == 0, numbers)

print(list(even))  # [2, 4, 6]


Nima bo‘ldi bu yerda?

•  lambda x: x % 2 == 0 — juft sonlarni ajratib oldi
•  filter(...) — faqat True qaytaradigan elementlarni saqladi
Python Weekly (Issue 709 July 31 2025)

Yangiliklar: PyPI foydalanuvchilariga email orqali fishing hujumi
PyPI foydalanuvchilari fishing hujumiga uchramoqda. Ular PyPI’dan yuborilgandek ko‘ringan email xabarlari orqali soxta saytga o‘tkazilib, login ma’lumotlari o‘g‘irlanmoqda. PyPI’ning o‘zi buzilmagan, ammo foydalanuvchilarga bunday havolalarni bosmaslik, URL manzillarni sinchiklab tekshirish va agar ta’sirlangan bo‘lsa, darhol parollarni almashtirish tavsiya etiladi.

Batafsil comentariyada👇
🔹 reduce() — Bitta qiymatgacha qisqartiradi

📌 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)
@dataclass — Ma'lumotlar sinfi

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.
🔥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:

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
🧹 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.
🚀 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 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.
Python dasturchilar uchun roadmap
🧩 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!