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
Qachon biz SQL ishlatishga majburmiz?

1️⃣ Murakkab querylar ORMdan chiqib ketganda
Ba’zan ORM bilan yozish imkonsiz yoki juda noqulay bo‘lgan holatlar bo‘ladi:
• Window functionlar (ROW_NUMBER, RANK, LAG, LEAD)
• Murakkab subquerylar
• Analytics / reporting querylar
• Recursive querylar (CTE — WITH RECURSIVE)

ORM bunday joylarda ortiqcha kod yozishga majbur qiladi yoki umuman qo‘llab-quvvatlamaydi.

2️⃣ Performance muammosini optimizatsiya qilishda
Ba’zi querylarni ORM o‘zi avtomatik optimal yozmaydi:
• Keraksiz JOINlar
• Redundant querylar
• N+1 problemalari
• Inefficient filtr va sortlar

Performance kerak bo‘lsa, qo'lda SQL yozish shart.

3️⃣ Bulk operatsiyalarni tez bajarish kerak bo‘lganda
ORM ko‘pincha row-by-row ishlaydi. Shuning uchun:
• millionlab yozuvlarni UPDATE qilish
• katta mass INSERTlar
• batch DELETE

kabi operatsiyalarni raw SQL orqali ancha tez bajarish mumkin.

4️⃣ Databasega xos funksiyalardan foydalanishda
Har bir DB o‘ziga xos kuchli imkoniyatlarga ega:
• PostgreSQL → JSONB, array, full-text search
• MySQL → GIS, special indexing
• MSSQL → pivot/unpivot, advanced window functions

ORM bularning barchasini to‘liq qamrab ololmaydi.

5️⃣ Database-level tashkiliy kodlar kerak bo‘lganda
Masalan:
• Stored procedures
• Triggers
• Functions
• Materialized views

Bu holatlar SQLni chetlab o‘tib bo‘lmaydi.

6️⃣ DBA / DevOps bilan ishlayotganda
Monitoring, debugging, slow query analysis kabi ishlarda SQL bilish zarur:
• EXPLAIN / EXPLAIN ANALYZE
• Query planlarni tahlil qilish
• Index strategiyasini to‘g‘ri qo‘yish

Bular ORM bilan qilinmaydi.

🎯 Xulosa

ORM — qulaylik. SQL — poydevor.
Shu sababli professional backendchi:
• CRUD → ORM
• Murakkab / performance / DB-specific → SQL
kombinatsiyasidan foydalanadi.
🔥5👍43
🔍 Profiling nima?

Profiling — bu dastur bajarilishi vaqtida:
• qaysi funksiya
• necha marta chaqirilgani
• qancha vaqt ishlagani
haqida aniq statistika beradigan tahlil usuli.

Pythonda buning uchun eng asosiy modul — cProfile.

🧠 cProfile nima?

cProfile — Pythonning standart (built-in) profiling moduli bo‘lib, u:
• butun dastur bajarilishini tahlil qiladi
• sekin ishlayotgan funksiyalarni topadi
• optimallashtirishga yo‘l ko‘rsatadi

📌 U faqat funksiyalarni emas, balki butun kod oqimini kuzatadi.

▶️ Oddiy foydalanish
import cProfile

def slow_function():
total = 0
for i in range(1_000_000):
total += i
return total

cProfile.run("slow_function()")


📊 Natijada nimani ko‘ramiz?

Profiling natijasida quyidagi ustunlar chiqadi:
ncalls — funksiya nechta marta chaqirilgan
tottime — funksiya ichida sarflangan vaqt
cumtime — funksiya + ichki chaqiriqlar bilan umumiy vaqt

📌 cumtime katta bo‘lsa — funksiya sekin ishlayapti!

❗️ Muhim eslatmalar
• Avval profiling, keyin optimallashtirish
• Taxmin bilan emas, statistikaga qarab ishlang
• Har doim ham eng uzun kod sekin bo‘lmaydi

Xulosa
🔹 cProfile — Python dasturchisi uchun majburiy vosita
🔹 Sekin joylarni aniq topib beradi
🔹 Katta loyihalarda vaqt va resursni tejaydi

👉 “Sekin kodni tezlashtirish profilingdan boshlanadi!”
👍53🔥2
💡 Python if shartlari va tekshirish ketma-ketligi

Pythonda if dagi shartlar operatorlarga qarab tekshiriladi va short-circuit (qisqa tutashuv) baholash qo‘llanadi.

1️⃣ and operatori
if shart1 and shart2:
...


• Python chapdan o‘nga tekshiradi.
• Agar birinchi shart False bo‘lsa, ikkinchi shartni tekshirmaydi.
• Foydasi: keraksiz tekshiruvdan qochadi va xatolardan saqlaydi.

Misol:
if os.path.exists("data.txt") and os.access("data.txt", os.R_OK):
print("Fayl mavjud va o'qishga ruxsat berilgan")

and bilan birinchi shart (os.path.exists("data.txt")) chapdan tekshiriladi.
• Agar fayl mavjud bo‘lmasa, ikkinchi shart (os.access) tekshirilmaydi, xatolik bo‘lmaydi.

2️⃣ or operatori
if shart1 or shart2:
...


• Python ham chapdan o‘nga tekshiradi.
• Agar birinchi shart True bo‘lsa, ikkinchi shartni tekshirmaydi.
• Foydasi: kerakli shart allaqachon True bo‘lsa, qolganlarini tekshirmasdan o‘tadi.

Misol:
if x == 0 or 10 / x > 1:
print("Shart bajarildi")


Agar x == 0 True bo‘lsa, 10 / x hech qachon tekshirilmaydi → ZeroDivisionError bo‘lmaydi.

Xulosa
Short-circuiting: Python faqat kerakli shartlarni tekshiradi.
and: birinchi shart False bo‘lsa, qolganlari tekshirilmaydi.
or: birinchi shart True bo‘lsa, qolganlari tekshirilmaydi.
• Shuning uchun shartlarni xatolik va samaradorlik nuqtai nazaridan tartiblang.
🔥5👍43
📌 Pythonda with context manager bilan bir nechta fayl ochish mumkinmi?
👉 Ha, mumkin va juda qulay!

Pythonda with operatori fayllarni avtomatik yopish imkonini beradi. Eng yaxshi tomoni — bir vaqtning o‘zida bir nechta faylni ochish mumkin 🔥

1️⃣ Bitta with ichida bir nechta fayl
with open("file1.txt") as f1, open("file2.txt") as f2:
print(f1.read())
print(f2.read())


📌 with bloki tugashi bilan barcha fayllar yopiladi, zo'r a?

2️⃣ Agar fayllar soni noma’lum bo‘lsa (ExitStack)
from contextlib import ExitStack

files = ["a.txt", "b.txt", "c.txt"]

with ExitStack() as stack:
opened_files = [stack.enter_context(open(f)) for f in files]
for f in opened_files:
print(f.read())


📌 Bu usul dinamik va professional yechim hisoblanadi.

🚀 Xulosa
• Kam fayl → with open() as f1, open() as f2
• Ko‘p yoki noma’lum fayl → ExitStack
• close() ni qo‘lda yozish shart emas

💡 Toza kod — yaxshi dasturchining belgisi.
👍4❤‍🔥3🔥21
📌 Base64 nima va u nima uchun kerak?

Base64 — bu binary (ikkilik) ma’lumotlarni matn (text) ko‘rinishida ifodalash usuli.
Ya’ni rasm, video, fayl kabi ma’lumotlarni xavfsiz uzatish uchun ishlatiladi.

Nega Base64 kerak?

Ba’zi tizimlar faqat text bilan ishlaydi (masalan: JSON, XML, email).
Shu sababli binary ma’lumotlarni to‘g‘ridan-to‘g‘ri uzatib bo‘lmaydi.

👉 Base64 bu muammoni hal qiladi.

🔤 Base64 qanday ishlaydi?

• Ma’lumot 6 bitli bo‘laklarga bo‘linadi
• Har bir bo‘lak maxsus belgilar to‘plamiga moslanadi:
A–Z a–z 0–9 + /

• Natija — faqat o‘qiladigan text

📌 Oxirida = belgisi padding (to‘ldirish) uchun ishlatiladi.

🧑‍💻 Python misolida
import base64

text = "Hello World"
encoded = base64.b64encode(text.encode())
decoded = base64.b64decode(encoded).decode()

print(encoded) # b'SGVsbG8gV29ybGQ='
print(decoded) # Hello World

⚠️ Muhim eslatma

Base64shifrlash (encryption) emas
✔️ Bu faqat kodlash (encoding)

📌 Base64 ma’lumot hajmini taxminan 33% ga oshiradi

📦 Qayerlarda ishlatiladi?
• API (JSON ichida rasm yuborish)
• JWT tokenlar
• Email attachment’lar
• HTML / CSS (data:image/png;base64,...)

🚀 Xulosa
• Base64 — binary → text
• Xavfsiz uzatish uchun qulay
• Lekin maxfiylik bermaydi

💡 Base64ni tushunish — backend va APIlar bilan ishlashda juda muhim.
👍42🔥2
🐍 RxPy — Pythonda Reactive Programming

Agar siz:
— asinxron jarayonlar
— event va real-time data
— murakkab oqimlarni soddalashtirish

bilan ishlayotgan bo‘lsangiz, RxPy siz uchun juda foydali kutubxona.

🔹 RxPy nima?

RxPy (ReactiveX for Python) — bu Observable (ma’lumot oqimi) va Observer (kuzatuvchi) konsepsiyasiga asoslangan reaktiv dasturlash kutubxonasi.

Oddiy qilib aytganda:
“Ma’lumot keladi → oqimdan o‘tadi → qayta ishlanadi”

🔹 Oddiy misol
from rx import from_
from rx import operators as ops

from_([1, 2, 3, 4]).pipe(
ops.map(lambda x: x * 2),
ops.filter(lambda x: x > 4)
).subscribe(print)

Qisqacha qilib 👇

• from_([1,2,3,4])
→ listni ma’lumot oqimi (Observable) ga aylantiradi
• map(lambda x: x * 2)
→ har bir qiymatni 2 ga ko‘paytiradi
• filter(lambda x: x > 4)
→ 4 dan katta qiymatlarnigina qoldiradi
• pipe(...)
→ oqimni ketma-ket operatorlardan o‘tkazadi
• subscribe(print)
→ oqimni ishga tushiradi va natijani chiqaradi

📌 Natija:
6
8


🔹 RxPy nimada kuchli?

Asinxron ishlar
Event-driven arxitektura
Stream bilan ishlash
Kod kam, mantiq aniq
map / filter / merge / debounce kabi operatorlar

🔹 Qayerda ishlatiladi?

— API va websocketlar
— real-time data
— GUI ilovalar (PyQt, Tkinter)
— microservice oqimlari

🔹 O‘rnatish
pip install rx


🔹 Qachon ishlatmaslik kerak?

oddiy sinxron skriptlar
kichik loyihalar
reactive fikrlash kerak bo‘lmagan joylar

💡 Xulosa:
RxPy — murakkab ma’lumot oqimlarini toza, boshqariladigan va kengaytiriladigan qilib yozish uchun kuchli vosita.
6👍4🔥4
🐍 Pythonda Name Mangling nima?

Pythonda double underscore (__) bilan boshlanadigan atribut va metodlar tashqaridan bevosita ko‘rinmas bo‘lishi uchun avtomatik ravishda o‘zgartiriladi.
Bu mexanizm name mangling deb ataladi.

Python ichida atribut nomi quyidagicha o‘zgartiriladi:
__attr  →  _ClassName__attr


Shu sababli class tashqarisidan __attr ga to‘g‘ridan-to‘g‘ri murojaat qilib bo‘lmaydi.

📌 Misol
class MyClass:
def __init__(self):
self.__private_var = 42 # double underscore

obj = MyClass()

# print(obj.__private_var) # AttributeError
print(obj._MyClass__private_var) # 42

🧠 Izoh
• Python bu orqali atributni tasodifan tashqaridan o‘zgartirib yuborishdan himoya qiladi
• Bu haqiqiy private emas, lekin accidental overwrite ni oldini oladi
• Name mangling asosan inheritance vaqtida foydali

🔍 Single underscore vs Double underscore
_var —> obj._var kabi murojat qilinadi, oddiy protected attribut sifatida ishlatiladi.
• __var —> obj._ClassName__var kabi murojat qilinadi, chunki name mangling mavjud, murakkabroq

Eslatma: Yana bir qiziq tomoni biz odatda obyektning attributi bilan ishlash uchun ishlatadigan hasattr(), getattr() va setattr() ni __var kabi attributlar bilan ishlata olmaymiz. Chunki ular pythonning ichki mexanizmida name mangling tufayli obj._ClassName__var kabi saqlangan bo'ladi.

📌 Qt signal-slot, getattr/setattr, threadlar bilan ishlaganda
_var ishlatish ancha qulay.


🧩 Name Mangling bo‘yicha xulosa
Pythondagi encapsulation mexanizmi
Inheritance paytida nomlar to‘qnashuvini oldini oladi
• __var ni faqat haqiqatan ichki bo‘lishi kerak bo‘lgan atributlar uchun ishlatish kerak
Aksariyat holatlarda single underscore (_var) yetarli
3👍2🔥1👏1
🐍 Scope nima? (oddiy tushuntirish bilan)

Siz yozgan o‘zgaruvchi kodning hamma joyida ishlaydimi? 🤔 Yo‘q. Python har bir o‘zgaruvchiga qayerda yaratilganiga qarab ruxsat beradi. Bu tushuncha — scope deyiladi.

🧭 Python o'zgaruvchini qanday qidiradi?

Python o‘zgaruvchini 4 bosqichda qidiradi:

L → E → G → B

Local — hozirgi funksiya ichida
Enclosing — tashqi (nested) funksiya ichida
Global — fayl darajasida
Built-in — Python ichidagi tayyor nomlar (len, print, ...)

Topilmasa → NameError

📌 1. Local (eng yaqin scope)
def test():
x = 10
print(x) # ishlaydi

test()
print(x) # NameError

👉 x faqat funksiya ichida yashaydi, funksiyadan tashqarida uni tog'ridan-to'g'ri ishlata olmaysiz!

📌 2. Global
x = 5

def test():
print(x) # globaldan oladi

test()

👉 Funksiya global o'zgaruvchini muammosiz o‘qiy oladi. Lekin o‘zgartirmoqchi bo‘lsangiz global kalit so'zini ishlatish majburiy:
x = 5

def test():
global x
x += 1

test()
print(x) # 6

👉 global — tashqaridagi o‘zgaruvchini o‘zgartiradi

📌 3. Enclosing (nested funksiyalar)
def outer():
x = 10

def inner():
print(x) # tashqaridan oladi

inner()

outer()


⚠️ nonlocal ishlatish
def outer():
x = 10

def inner():
nonlocal x
x += 5

inner()
print(x) # 15

outer()

👉 nonlocal — ichki funksiya ichida tashqi funksiyaning o‘zgaruvchisini o‘zgartiradi


🧩 Xulosa

✔️ Python L → E → G → B tartibida qidiradi
✔️ Har bir o‘zgaruvchining “hududi” bor
✔️ global va nonlocal — kerak bo‘lsa ishlatiladi
✔️ Toza kod uchun — argument bilan ishlash yaxshiroq
2👏2👍1
🐍 Pythonda funksiya ichidan funksiya qaytarish mumkinmi? 🤯

Quyidagi kodga qarang:
def create(m, n):
if m == 'Max':
return lambda v: v < n
elif m == 'Min':
return lambda v: v > n

checker = create('Max', 31)

print(checker(15)) # ?
print(checker(32)) # ?


🤔 Nima chiqadi?

Bir o‘ylab ko‘ring... 👇

Javob:
True
False


🧠 Nima bo‘lyapti o‘zi?

create() funksiyasi oddiy qiymat emas, boshqa funksiya (lambda) qaytaryapti.
checker = lambda v: v < 31


💡 Eng qiziq joyi

n = 31 yo‘qolib ketmaydi! 😳
U lambda ichida saqlanib qoladi

👉 Bu — closure deyiladi

🔥 Nega bu kuchli?

Siz dinamik funksiyalar yasay olasiz:
check10 = create('Max', 10)
check50 = create('Max', 50)

print(check10(20)) # False
print(check50(20)) # True


⚠️ E’tibor bering
max = create('Max', 31)

bu yaxshi emas (built-in max() ni bosib yuboradi)

yaxshisi:
max_checker = create('Max', 31)


🧩 Xulosa

• Funksiya ichidan funksiya qaytarish mumkin
• Ichki funksiya tashqi o‘zgaruvchini esda saqlaydi
• Bu mexanizm → closure
Juda foydali: filter, validator, dynamic logic
👍4🔥3👏21
🌍 FastAPI va ko‘p tilli dastur: Zarurati va imkoniyatlari

Siz FastAPI bilan backend qurayotganingizda ko‘p tilli dastur (i18n) haqida o‘ylash juda muhim. Nega?

1️⃣ Nima uchun ko‘p tilli qilish kerak?

🌐 Global auditoriya: Foydalanuvchilar bir nechta tilni biladi. Sizning API faqat bir til bilan javob qaytarsa, foydalanuvchi tajribasi buziladi.
🔒 Xabarlar va xatoliklar: Har bir error yoki success xabari foydalanuvchiga tushunarli bo‘lishi kerak.
⚡️ Professional standart: Ko‘p tilli API bugungi kunda standart hisoblanadi, ayniqsa React/Flutter frontend bilan ishlaganda.

2️⃣ FastAPI imkoniyatlari

🔹 Variant 1: gettext + .po/.mo fayllar
• Python standart kutubxonasi
• Tarjima fayllari (.po) orqali xabarlarni boshqarish
• .mo faylga kompilyatsiya qilib, tez ishlaydi
• Middleware orqali foydalanuvchi tilini aniqlash mumkin

🔹 Variant 2: Babel
• .po fayllarni yaratish va kompilyatsiya qilishni osonlashtiradi
• Sana, vaqt, valyuta formatlash imkoniyati

🔹 Variant 3: fastapi-babel yoki fastapi-i18n
• FastAPI uchun tayyor middleware
• Accept-Language header yoki query param orqali tilni aniqlaydi

🔹 Variant 4: JSON fayllar + frontend translation
• Backend faqat xabar ID yuboradi
• React / Vue / Flutter frontend foydalanuvchining tiliga mos tarjima qiladi
• Frontendda i18next bilan osongina ishlaydi
🔥2👏2😁2👍1
📡 Ngrok nima? Oddiy tushuntirish!

Agar siz dasturchi bo‘lsangiz yoki lokal server bilan ishlasangiz, ngrok sizga juda foydali bo‘lishi mumkin 👇

🔹 Ngrok — bu sizning kompyuteringizda (localhostda) ishlayotgan serverni internet orqali hammaga ochib beradigan xizmat.

💡 Ya’ni:
Sizda lokal ishlayotgan sayt yoki API bor (masalan: http://localhost:3000)
Ngrok uni quyidagicha public linkka aylantiradi:
👉 https://abc123.ngrok.io

🚀 Qachon kerak bo‘ladi?
• Telegram bot yozayotganda (webhook ulash uchun)
• Frontend va backendni test qilishda
• Boshqalarga o‘z loyihangizni ko‘rsatishda
• Mobil ilovalarni API bilan bog‘lashda

⚙️ Qanday ishlaydi?
• Ngrokni o‘rnatasiz
• Terminalda quyidagini yozasiz: ngrok http 3000
• Sizga public URL beradi — bo‘ldi!

🔐 Afzalliklari:
Oson sozlanadi
HTTPS avtomatik ishlaydi
Real-time trafikni ko‘rish mumkin

⚠️ Eslatma:
Free versiyada link har safar o‘zgaradi.

🔥 Agar siz backend yoki bot yozayotgan bo‘lsangiz — ngrok sizning eng yaqin yordamchingiz!
👍54🔥4👏1👌1🤝1