🚀 Pythonda geokodlash oson!
pgeocode — bu pochta indekslari (ZIP-kodlar) orqali joylashuv haqida ma’lumot olishga yordam beradigan kutubxona.
🔍 Nimalar qilish mumkin?
• Pochta indeksidan shahar, viloyat/shtat, mamlakat nomini olish
• Kenglik / uzunlik koordinatalarini bilish
• Ikki pochta indeksi orasidagi masofani hisoblash
💻 Misol:
📦 O‘rnatish:
👉 Agar sizga tezkor geokodlash kerak bo‘lsa — pgeocode aynan siz uchun!
Batafsil hujjatlari: https://pgeocode.readthedocs.io/en/latest/
pgeocode — bu pochta indekslari (ZIP-kodlar) orqali joylashuv haqida ma’lumot olishga yordam beradigan kutubxona.
🔍 Nimalar qilish mumkin?
• Pochta indeksidan shahar, viloyat/shtat, mamlakat nomini olish
• Kenglik / uzunlik koordinatalarini bilish
• Ikki pochta indeksi orasidagi masofani hisoblash
💻 Misol:
import pgeocode
nomi = pgeocode.Nominatim('us')
info = nomi.query_postal_code("10001") # New York
print(info)
dist = pgeocode.GeoDistance('us')
print(dist.query_postal_code("10001", "90210")) # NY ↔️ LA
📦 O‘rnatish:
pip install pgeocode
👉 Agar sizga tezkor geokodlash kerak bo‘lsa — pgeocode aynan siz uchun!
Batafsil hujjatlari: https://pgeocode.readthedocs.io/en/latest/
👍1
🚀 Asyncer – FastAPI yaratuvchisidan yangi kutubxona
⚡️ Asyncer — bu mini-kutubxona bo‘lib, Pythonda asinxron kod bilan ishlashni osonlashtiradi. Muhimi, u framework emas, balki yordamchi funksiyalar to‘plami.
🔹 Nima beradi?
• Kodni yanada toza va tushunarli qiladi
• IDEda avto-takliflarni yaxshilaydi
• Tip xatolarini kamaytiradi
• Sync va async kodni aralashtirishni yengillashtiradi
🔧 Hozircha unda atigi 4 ta funksiya bor (masalan: soonify, asyncify), lekin integratsiya qilish uchun bir necha daqiqa kifoya.
💡 Masalan, oddiy funksiyani async qilib ishlatish yoki async funksiyani sync ichida chaqirishni Asyncer bilan oson hal qilasiz.
📚 Batafsil: asyncer.tiangolo.com
👨💻 GitHub: github.com/fastapi/asyncer
Komentariyada misol keltirilgan👇
⚡️ Asyncer — bu mini-kutubxona bo‘lib, Pythonda asinxron kod bilan ishlashni osonlashtiradi. Muhimi, u framework emas, balki yordamchi funksiyalar to‘plami.
🔹 Nima beradi?
• Kodni yanada toza va tushunarli qiladi
• IDEda avto-takliflarni yaxshilaydi
• Tip xatolarini kamaytiradi
• Sync va async kodni aralashtirishni yengillashtiradi
🔧 Hozircha unda atigi 4 ta funksiya bor (masalan: soonify, asyncify), lekin integratsiya qilish uchun bir necha daqiqa kifoya.
💡 Masalan, oddiy funksiyani async qilib ishlatish yoki async funksiyani sync ichida chaqirishni Asyncer bilan oson hal qilasiz.
📚 Batafsil: asyncer.tiangolo.com
👨💻 GitHub: github.com/fastapi/asyncer
Komentariyada misol keltirilgan👇
GitHub
GitHub - fastapi/asyncer: Asyncer, async and await, focused on developer experience.
Asyncer, async and await, focused on developer experience. - fastapi/asyncer
🔥3
🚀 PlutoPrint bilan PDF va PNG yaratish juda oson!
Endi Python yordamida HTML yoki XML fayllardan to‘g‘ridan-to‘g‘ri sifatli PDF va rasm yaratishingiz mumkin. PlutoPrint kutubxonasi yengil, tez va qulay: hisobotlar, hisob-fakturalar, chipta va vizualizatsiyalar uchun ideal!
Asosiy imkoniyatlar:
✅ PDF va PNG qo‘llab-quvvatlashi
✅ Oson o‘rnatish va ishlatish (pip install plutoprint)
Misol:
HTML misol fayl:
📌 Shu HTML faylni saqlang input.html fayliga, so‘ng plutoprint input.html output.pdf --size=A4 buyrug‘i bilan PDF yaratishingiz mumkin.
html fayl va yuqoridagi kod orqali yaratilgan pdf fayl komentariyada👇
Endi Python yordamida HTML yoki XML fayllardan to‘g‘ridan-to‘g‘ri sifatli PDF va rasm yaratishingiz mumkin. PlutoPrint kutubxonasi yengil, tez va qulay: hisobotlar, hisob-fakturalar, chipta va vizualizatsiyalar uchun ideal!
Asosiy imkoniyatlar:
✅ PDF va PNG qo‘llab-quvvatlashi
✅ Oson o‘rnatish va ishlatish (pip install plutoprint)
Misol:
plutoprint input.html output.pdf --size=A4
HTML misol fayl:
<!DOCTYPE html>
<html lang="uz">
<head>
<meta charset="UTF-8">
<title>Hisobot</title>
<style>
body { font-family: Arial, sans-serif; margin: 40px; }
h1 { color: #4CAF50; }
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>Hisobot: Sotuvlar</h1>
<p>Sana: 12-sentabr, 2025</p>
<table>
<tr>
<th>Mijoz</th>
<th>Miqdor</th>
<th>Narx</th>
</tr>
<tr>
<td>Ali</td>
<td>5</td>
<td>100 000 so'm</td>
</tr>
<tr>
<td>Vali</td>
<td>3</td>
<td>60 000 so'm</td>
</tr>
</table>
</body>
</html>
📌 Shu HTML faylni saqlang input.html fayliga, so‘ng plutoprint input.html output.pdf --size=A4 buyrug‘i bilan PDF yaratishingiz mumkin.
html fayl va yuqoridagi kod orqali yaratilgan pdf fayl komentariyada👇
⚡2
📌 Python: raise bilan istisno yaratish
raise — kodda kutilmagan xatolik yuzaga kelganda istisno (exception) yaratish uchun ishlatiladi.
💡 Misol:
✅ Bu yerda ValueError xatolik xabari bilan yuzaga keladi.
⚡️ Istisno yuzaga kelganda:
1. Kod bajarilishi to‘xtaydi
2. try/except blokida xato qayta ishlanishi mumkin
3. Agar qayta ishlanmasa — dastur xato bilan tugaydi
🔹 Misol:
Agar chegirma 0 dan kichik yoki 100 dan katta bo‘lsa, xato yuzaga keladi
raise — kodda kutilmagan xatolik yuzaga kelganda istisno (exception) yaratish uchun ishlatiladi.
💡 Misol:
raise ValueError('Invalid value')✅ Bu yerda ValueError xatolik xabari bilan yuzaga keladi.
⚡️ Istisno yuzaga kelganda:
1. Kod bajarilishi to‘xtaydi
2. try/except blokida xato qayta ishlanishi mumkin
3. Agar qayta ishlanmasa — dastur xato bilan tugaydi
🔹 Misol:
def calculate_discount(discount):
if discount < 0 or discount > 100:
raise ValueError("Discount must be between 0 and 100")
Agar chegirma 0 dan kichik yoki 100 dan katta bo‘lsa, xato yuzaga keladi
Bugun hamyurtimiz Murodjon Ahmadaliyev yaponiyalik Inoe bilan jang qiladi, Mutloq jahon chempionligi uchun kechadigan ushbu jang qanday yakun topadi nima deb o'ylaysiz? Kanelo va Crawford o'rtasidagi jang haqidachi?
try-finally ni except blokisiz qo‘llash nimaga kerak bo‘lishi mumkin?
try-finally konstruksiyasi except bloki ishlatilmagan holda quyidagi hollarda qo‘llanishi mumkin:
— Fayllar bilan ishlagandan so‘ng, xatolik yuz bersa ham ularni yopish uchun.
— Resurslarni bo‘shatish uchun, masalan, tarmoq ulanishlari yoki blokirovkalarni yechish.
— Dastur ishlashi to‘xtatilganda uzoq davom etuvchi amallar yoki jarayonlarni bekor qilish uchun. Masalan, ishga tushirilgan oqimlarni (threads) to‘xtatish.
— Xatolik bo‘lsa ham, kod blokining yakunlanishi haqida log yozish yoki xabar berish uchun.
— Kod bloki yakunlangach, natijadan qat’i nazar bajarilishi shart bo‘lgan mantiqni bajarish uchun, masalan, hisoblagichlarni (counter) qayta tiklash.
try-finally konstruksiyasi except bloki ishlatilmagan holda quyidagi hollarda qo‘llanishi mumkin:
— Fayllar bilan ishlagandan so‘ng, xatolik yuz bersa ham ularni yopish uchun.
— Resurslarni bo‘shatish uchun, masalan, tarmoq ulanishlari yoki blokirovkalarni yechish.
— Dastur ishlashi to‘xtatilganda uzoq davom etuvchi amallar yoki jarayonlarni bekor qilish uchun. Masalan, ishga tushirilgan oqimlarni (threads) to‘xtatish.
— Xatolik bo‘lsa ham, kod blokining yakunlanishi haqida log yozish yoki xabar berish uchun.
— Kod bloki yakunlangach, natijadan qat’i nazar bajarilishi shart bo‘lgan mantiqni bajarish uchun, masalan, hisoblagichlarni (counter) qayta tiklash.
❤1
🐢 Pythonda Turtle kutubxonasi
Turtle — Pythondagi eng qiziqarli va o‘rganishga oson kutubxonalardan biri. U yordamida grafik shakllar, geometrik chizmalar, hatto oddiy o‘yinlarni ham yaratish mumkin.
👉 Dastlab o‘quvchilar uchun yaratilgan bo‘lsa-da, hozir ham boshlovchilarga programmalashni o‘rganishni zavqliroq qilish uchun eng zo‘r vosita hisoblanadi.
🔹 Nimalar qilish mumkin?
• Doira, kvadrat, yulduz kabi shakllar chizish ✨
• Rangli naqshlar yaratish 🎨
• Animatsiya va oddiy o‘yinlar yasash 🎮
🔹 Misol kod:
➡️ Bu kod ajoyib gullarga o‘xshash naqsh chizib beradi 🌸
🔹 Afzalliklari:
• Juda oson sintaksis
• Tez natija ko‘rsatadi
• Bolalar va yangi boshlovchilar uchun motivatsion
komentariyada kub chizish kodi keltirilgan👇
Turtle — Pythondagi eng qiziqarli va o‘rganishga oson kutubxonalardan biri. U yordamida grafik shakllar, geometrik chizmalar, hatto oddiy o‘yinlarni ham yaratish mumkin.
👉 Dastlab o‘quvchilar uchun yaratilgan bo‘lsa-da, hozir ham boshlovchilarga programmalashni o‘rganishni zavqliroq qilish uchun eng zo‘r vosita hisoblanadi.
🔹 Nimalar qilish mumkin?
• Doira, kvadrat, yulduz kabi shakllar chizish ✨
• Rangli naqshlar yaratish 🎨
• Animatsiya va oddiy o‘yinlar yasash 🎮
🔹 Misol kod:
import turtle
t = turtle.Turtle()
for i in range(36):
t.forward(100)
t.right(170)
turtle.done()
➡️ Bu kod ajoyib gullarga o‘xshash naqsh chizib beradi 🌸
🔹 Afzalliklari:
• Juda oson sintaksis
• Tez natija ko‘rsatadi
• Bolalar va yangi boshlovchilar uchun motivatsion
komentariyada kub chizish kodi keltirilgan👇
👍3
🐾 PyGame — boshlash uchun eng qulay kutubxona
PyGame Python bilan 2D o‘yinlar, animatsiyalar va interaktiv vizualizatsiyalar yaratish uchun juda mos. Boshlash uchun:
🔧 Kichik misol — harakatlanuvchi shar
📌 Nima o‘rganasiz?
• Oyna ochish va event loop (pygame.event)
• Ob’yekt harakati va oddiy kolliziya (devorga tegish)
• Rasm chizish (draw.circle) va FPS boshqarish (Clock)
🚀 Keyingi qadamlar: spritelar, klaviatura boshqaruvi, tovush, menyu, va o‘yinning asosiy logikasini yozish.
Natijasining skrinshoti komentariyada👇
PyGame Python bilan 2D o‘yinlar, animatsiyalar va interaktiv vizualizatsiyalar yaratish uchun juda mos. Boshlash uchun:
pip install pygame
🔧 Kichik misol — harakatlanuvchi shar
import pygame
pygame.init()
W, H = 640, 360
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("PyGame — Oddiy misol")
x, y = W//2, H//2
vx = 3 # tezlik (px/frame)
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# pozitsiyani yangilash
x += vx
if x <= 20 or x >= W-20:
vx = -vx # devorga teganda qaytadi
# chizish
screen.fill((30, 30, 30)) # fon
pygame.draw.circle(screen, (0, 160, 255), (x, y), 20) # shar
pygame.display.flip()
clock.tick(60) # 60 FPS
pygame.quit()
📌 Nima o‘rganasiz?
• Oyna ochish va event loop (pygame.event)
• Ob’yekt harakati va oddiy kolliziya (devorga tegish)
• Rasm chizish (draw.circle) va FPS boshqarish (Clock)
🚀 Keyingi qadamlar: spritelar, klaviatura boshqaruvi, tovush, menyu, va o‘yinning asosiy logikasini yozish.
Natijasining skrinshoti komentariyada👇
🔥1
🦆 Duck Typing (O‘rdak tipizatsiyasi)
Dasturlashda ba’zan obyektning qaysi sinfga tegishli ekanligi muhim emas. Muhimi — u kerakli metod yoki xususiyatga ega bo‘lsa, foydalanish mumkin.
👉 Qoidasi oddiy:
“Agar u o‘rdakdek suzsa va o‘rdakdek qichqirsa — demak, u o‘rdak.”
🔹 Afzalliklari:
• Kodni turli sinflarga qattiq bog‘lamaydi
• Moslashuvchan bo‘ladi
• Yangi turlarni qo‘shish oson
• Polimorfizm (turli obyektlarni bir xil ishlatish) oddiylashadi
💡 Misol (Python):
👉 Ko‘rib turganingizdek, funksiyaga kim yuborilganini tekshirish shart emas. Faqat quack() metodi mavjud bo‘lsa, ishlaydi.
Dasturlashda ba’zan obyektning qaysi sinfga tegishli ekanligi muhim emas. Muhimi — u kerakli metod yoki xususiyatga ega bo‘lsa, foydalanish mumkin.
👉 Qoidasi oddiy:
“Agar u o‘rdakdek suzsa va o‘rdakdek qichqirsa — demak, u o‘rdak.”
🔹 Afzalliklari:
• Kodni turli sinflarga qattiq bog‘lamaydi
• Moslashuvchan bo‘ladi
• Yangi turlarni qo‘shish oson
• Polimorfizm (turli obyektlarni bir xil ishlatish) oddiylashadi
💡 Misol (Python):
class Duck:
def quack(self):
print("Quack!")
class Robot:
def quack(self):
print("Robot quack!")
def make_quack(obj):
obj.quack() # faqat quack() metodi bo‘lsa kifoya
make_quack(Duck()) # Quack!
make_quack(Robot()) # Robot quack!
👉 Ko‘rib turganingizdek, funksiyaga kim yuborilganini tekshirish shart emas. Faqat quack() metodi mavjud bo‘lsa, ishlaydi.
🐍 Pythonda Old-style va New-style Klasslar
🔹 Old-style klasslar faqat Python 2 da mavjud edi.
🔹 Python 3 da esa hamma klasslar avtomatik new-style hisoblanadi.
📌 Old-style klass (faqat Python 2 da)
📌 New-style klass (Python 2 va Python 3 da)
Python 3 da esa quyidagisi ham new-style bo‘ladi:
🔑 Asosiy farqlar (faqat Python 2 uchun muhim)
• Old-style klasslar object dan meros olmaydi.
• New-style klasslar object dan meros oladi.
• New-style klasslarda qo‘shimcha imkoniyatlar bor:
• descriptors
• properties
• __slots__
• metaclass ishlashi
New-style klasslar to‘liq OOP imkoniyatlarini qo‘llab-quvvatlaydi.
✅ Xulosa
• Agar siz Python 3 da ishlayotgan bo‘lsangiz — hamma klasslar new-style, qo‘shimcha hech narsa yozishingiz shart emas.
• Python 2 ishlatayotgan bo‘lsangiz, object dan meros olishni unutmang:
📌 Demak, hozirgi zamonda old-style klass tushunchasi tarixiy ahamiyatga ega xolos.
🔹 Old-style klasslar faqat Python 2 da mavjud edi.
🔹 Python 3 da esa hamma klasslar avtomatik new-style hisoblanadi.
📌 Old-style klass (faqat Python 2 da)
class OldClass: # object dan meros olmaydi
pass
📌 New-style klass (Python 2 va Python 3 da)
class NewClass(object): # object dan meros oladi
pass
Python 3 da esa quyidagisi ham new-style bo‘ladi:
class AnyClass:
pass
🔑 Asosiy farqlar (faqat Python 2 uchun muhim)
• Old-style klasslar object dan meros olmaydi.
• New-style klasslar object dan meros oladi.
• New-style klasslarda qo‘shimcha imkoniyatlar bor:
• descriptors
• properties
• __slots__
• metaclass ishlashi
New-style klasslar to‘liq OOP imkoniyatlarini qo‘llab-quvvatlaydi.
✅ Xulosa
• Agar siz Python 3 da ishlayotgan bo‘lsangiz — hamma klasslar new-style, qo‘shimcha hech narsa yozishingiz shart emas.
• Python 2 ishlatayotgan bo‘lsangiz, object dan meros olishni unutmang:
class MyClass(object):
pass
📌 Demak, hozirgi zamonda old-style klass tushunchasi tarixiy ahamiyatga ega xolos.
🔥2❤1
📊 ARIMA — vaqt qatorlari prognozlashdagi klassik model
🔹 ARIMA (AutoRegressive Integrated Moving Average) — vaqt qatorlarini prognozlashda eng mashhur statistik modellardan biri. U o‘tgan davrdagi qiymatlar va xatolarga asoslanib, kelajakni bashorat qiladi.
🛠 ARIMA qanday ishlaydi?
• AR (AutoRegressive) — o‘zining o‘tgan qiymatlaridan foydalanadi
• I (Integrated) — qatorni stasionar qilish uchun differensiallash
• MA (Moving Average) — o‘tgan prognoz xatolaridan foydalanadi
Ya’ni, ARIMA = o‘tgan qiymatlar + differensial + xatolar kombinatsiyasi.
✨ Afzalliklari:
• Oddiy va tushunarli matematik asos
• Trend va mavsumiylikni ushlay oladi (SARIMA orqali)
• Statistik interpretatsiya qulay
• Kichik datasetlarda ham ishlaydi
🔎 Oddiy misol (Python, statsmodels):
👉 Natija: keyingi davr qiymatlari prognozlanadi.
📌 Qachon ishlatish kerak?
• 📈 Sotuvlar, talab, narxlar prognozi
• 🔍 Trend va mavsumiylikni tahlil qilish
• ⚡️ Oddiy va tezkor vaqt qatori modellari kerak bo‘lganda
🔗 Ko‘proq bilish uchun: https://www.statsmodels.org/stable/index.html
🔹 ARIMA (AutoRegressive Integrated Moving Average) — vaqt qatorlarini prognozlashda eng mashhur statistik modellardan biri. U o‘tgan davrdagi qiymatlar va xatolarga asoslanib, kelajakni bashorat qiladi.
🛠 ARIMA qanday ishlaydi?
• AR (AutoRegressive) — o‘zining o‘tgan qiymatlaridan foydalanadi
• I (Integrated) — qatorni stasionar qilish uchun differensiallash
• MA (Moving Average) — o‘tgan prognoz xatolaridan foydalanadi
Ya’ni, ARIMA = o‘tgan qiymatlar + differensial + xatolar kombinatsiyasi.
✨ Afzalliklari:
• Oddiy va tushunarli matematik asos
• Trend va mavsumiylikni ushlay oladi (SARIMA orqali)
• Statistik interpretatsiya qulay
• Kichik datasetlarda ham ishlaydi
🔎 Oddiy misol (Python, statsmodels):
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
# Vaqt qatori
data = [112, 118, 132, 129, 121, 135, 148]
series = pd.Series(data)
# ARIMA(1,1,1) modeli
model = ARIMA(series, order=(1,1,1))
model_fit = model.fit()
# 5 davrga prognoz
forecast = model_fit.forecast(steps=5)
print(forecast)
👉 Natija: keyingi davr qiymatlari prognozlanadi.
📌 Qachon ishlatish kerak?
• 📈 Sotuvlar, talab, narxlar prognozi
• 🔍 Trend va mavsumiylikni tahlil qilish
• ⚡️ Oddiy va tezkor vaqt qatori modellari kerak bo‘lganda
🔗 Ko‘proq bilish uchun: https://www.statsmodels.org/stable/index.html
🔥2
📌 Python ichida Java kodini yozib ishga tushirish mumkinmi?
Ha, bunga subprocess yordamida erishish mumkin!
🔹 G‘oya shuki:
1. Python faylda Java kodini yozib beradi ✍️
2. Uni javac yordamida kompilyatsiya qiladi ⚙️
3. So‘ng java buyrug‘i orqali ishga tushiradi ▶️
💡 Misol kod:
✅ Natija:
🔎 Xulosa: Agar siz Python loyihangiz ichida kichkina Java kodlarini sinab ko‘rmoqchi bo‘lsangiz yoki Java kodini avtomatik ishga tushirish kerak bo‘lsa — subprocess eng oddiy va universal yo‘l hisoblanadi.
Ha, bunga subprocess yordamida erishish mumkin!
🔹 G‘oya shuki:
1. Python faylda Java kodini yozib beradi ✍️
2. Uni javac yordamida kompilyatsiya qiladi ⚙️
3. So‘ng java buyrug‘i orqali ishga tushiradi ▶️
💡 Misol kod:
import subprocess
# Java kodini faylga yozamiz
java_code = """
public class Hello {
public static void main(String[] args) {
System.out.println("Hello from Java!");
}
}
"""
with open("Hello.java", "w") as f:
f.write(java_code)
# Java kodini kompilyatsiya qilish
subprocess.run(["javac", "Hello.java"])
# Java dasturini ishga tushirish
result = subprocess.run(["java", "Hello"], capture_output=True, text=True)
print(result.stdout)
✅ Natija:
Hello from Java!
🔎 Xulosa: Agar siz Python loyihangiz ichida kichkina Java kodlarini sinab ko‘rmoqchi bo‘lsangiz yoki Java kodini avtomatik ishga tushirish kerak bo‘lsa — subprocess eng oddiy va universal yo‘l hisoblanadi.
👍3
🚀 Pythonda IntEnum va StrEnum
Pythonda oddiy Enum bilan bir qatorda maxsus enum sinflari ham mavjud:
🔹 IntEnum — int tipidan meros oladi. Qiymatlar son sifatida ishlaydi.
🔹 StrEnum — str tipidan meros oladi. Qiymatlar matn sifatida ishlaydi.
🔥 Nega kerak?
• Oddiy Enum qiymatlarini son yoki matn bilan bevosita taqqoslab bo‘lmaydi. Har safar .value chaqirishga to‘g‘ri keladi.
• IntEnum va StrEnum esa bu muammoni hal qiladi: qiymatlar mos ravishda int va str kabi ishlaydi.
✅ Foydali vaziyatlar:
• IntEnum – status kodlari, buyruqlar, raqamli sensor qiymatlari bilan ishlaganda.
• StrEnum – API response qiymatlari ("success", "error", "pending" va hokazo) bilan ishlaganda.
📌 Misol:
ℹ️ Eslatma:
• IntEnum — Python 3.4 dan mavjud.
• StrEnum — faqat Python 3.11 va undan yuqorida ishlaydi.
👉 Xullas, IntEnum va StrEnum kodingizni ixcham, tushunarli va xatolardan himoyalangan qiladi.
Pythonda oddiy Enum bilan bir qatorda maxsus enum sinflari ham mavjud:
🔹 IntEnum — int tipidan meros oladi. Qiymatlar son sifatida ishlaydi.
🔹 StrEnum — str tipidan meros oladi. Qiymatlar matn sifatida ishlaydi.
🔥 Nega kerak?
• Oddiy Enum qiymatlarini son yoki matn bilan bevosita taqqoslab bo‘lmaydi. Har safar .value chaqirishga to‘g‘ri keladi.
• IntEnum va StrEnum esa bu muammoni hal qiladi: qiymatlar mos ravishda int va str kabi ishlaydi.
✅ Foydali vaziyatlar:
• IntEnum – status kodlari, buyruqlar, raqamli sensor qiymatlari bilan ishlaganda.
• StrEnum – API response qiymatlari ("success", "error", "pending" va hokazo) bilan ishlaganda.
📌 Misol:
from enum import IntEnum, StrEnum
class Status(IntEnum):
OK = 1
ERROR = 2
print(Status.OK == 1) # True ✅
class Color(StrEnum):
RED = "red"
BLUE = "blue"
print(Color.RED == "red") # True ✅
ℹ️ Eslatma:
• IntEnum — Python 3.4 dan mavjud.
• StrEnum — faqat Python 3.11 va undan yuqorida ishlaydi.
👉 Xullas, IntEnum va StrEnum kodingizni ixcham, tushunarli va xatolardan himoyalangan qiladi.
🔥2
🚀 Pythonda Composition (Kompozitsiya)
Pythonda composition — bu obyektlar orasidagi “has-a” (ega bo‘lish) munosabati.
Ya’ni, bitta klass boshqa klassning obyektini o‘z tarkibida saqlaydi va undan foydalanadi.
🔹 Inheritance (meros olish) – “is-a” (bu shudir).
🔹 Composition (kompozitsiya) – “has-a” (ega bo‘ladi).
Misol 👇
🖥 Natija:
💡 Xulosa:
• Car → has-a Engine
• Mashina dvigatelga ega, shuning uchun bu composition deyiladi.
Pythonda composition — bu obyektlar orasidagi “has-a” (ega bo‘lish) munosabati.
Ya’ni, bitta klass boshqa klassning obyektini o‘z tarkibida saqlaydi va undan foydalanadi.
🔹 Inheritance (meros olish) – “is-a” (bu shudir).
🔹 Composition (kompozitsiya) – “has-a” (ega bo‘ladi).
Misol 👇
class Engine:
def start(self):
print("Dvigatel ishga tushdi")
class Car:
def __init__(self):
self.engine = Engine() # Composition
def drive(self):
self.engine.start()
print("Mashina harakatlanmoqda")
car = Car()
car.drive()
🖥 Natija:
Dvigatel ishga tushdi
Mashina harakatlanmoqda
💡 Xulosa:
• Car → has-a Engine
• Mashina dvigatelga ega, shuning uchun bu composition deyiladi.
👍2
📌 Framework nima?
Dasturchilikda ko‘p eshitiladigan so‘zlardan biri — Framework.
Lekin ko‘pchilik: “Framework aslida nima o‘zi?” — deb o‘ylaydi. Keling, oddiy qilib tushuntiramiz.
🏗 Framework — bu nima?
Framework — bu tayyor poydevor. Siz dastur yozayotganingizda, ba’zi narsalarni har safar noldan yozishingizga hojat qolmaydi. Framework sizga tayyor qoidalar va vositalar beradi, siz esa ustiga o‘z funksiyalaringizni qo‘shasiz.
🔹 Oddiy misol:
• Uy qurmoqchisiz. Agar poydevor, devor, elektr va quvurlar tayyor bo‘lsa, siz faqat bezatish va jihozlash bilan shug‘ullanasiz.
• Framework ham xuddi shunday — tayyor karkas.
📚 Framework va Kutubxona farqi
• Kutubxona (Library): Siz uni chaqirasiz → math.sqrt(25)
• Framework: U sizni “chaqiradi” → siz uning qoidalari bo‘yicha ishlaysiz.
👉 Ya’ni: kutubxonani siz boshqarasiz, framework esa loyihani boshqaradi.
🐍 Pythonda mashhur frameworklar
• Django → katta web-sayt va backend
• Flask → oddiy web loyihalar
• FastAPI → tezkor API servislar
• TensorFlow, PyTorch → Sun’iy intellekt (AI)
• Selenium → Avtomatlashtirish va test
💡 Xulosa
Framework — bu dasturchining vaqtini tejaydigan va loyihani tartibga soladigan qurol.
Agar professional bo‘lmoqchi bo‘lsangiz, kamida bitta frameworkni yaxshi bilishingiz kerak! 😉
Dasturchilikda ko‘p eshitiladigan so‘zlardan biri — Framework.
Lekin ko‘pchilik: “Framework aslida nima o‘zi?” — deb o‘ylaydi. Keling, oddiy qilib tushuntiramiz.
🏗 Framework — bu nima?
Framework — bu tayyor poydevor. Siz dastur yozayotganingizda, ba’zi narsalarni har safar noldan yozishingizga hojat qolmaydi. Framework sizga tayyor qoidalar va vositalar beradi, siz esa ustiga o‘z funksiyalaringizni qo‘shasiz.
🔹 Oddiy misol:
• Uy qurmoqchisiz. Agar poydevor, devor, elektr va quvurlar tayyor bo‘lsa, siz faqat bezatish va jihozlash bilan shug‘ullanasiz.
• Framework ham xuddi shunday — tayyor karkas.
📚 Framework va Kutubxona farqi
• Kutubxona (Library): Siz uni chaqirasiz → math.sqrt(25)
• Framework: U sizni “chaqiradi” → siz uning qoidalari bo‘yicha ishlaysiz.
👉 Ya’ni: kutubxonani siz boshqarasiz, framework esa loyihani boshqaradi.
🐍 Pythonda mashhur frameworklar
• Django → katta web-sayt va backend
• Flask → oddiy web loyihalar
• FastAPI → tezkor API servislar
• TensorFlow, PyTorch → Sun’iy intellekt (AI)
• Selenium → Avtomatlashtirish va test
💡 Xulosa
Framework — bu dasturchining vaqtini tejaydigan va loyihani tartibga soladigan qurol.
Agar professional bo‘lmoqchi bo‘lsangiz, kamida bitta frameworkni yaxshi bilishingiz kerak! 😉
👍1
🚀 Database Indexing — tezkor qidiruv siri
Indeks nima?
➡️ Indeks — bu jadvaldagi ma’lumotlarni tezroq topish uchun yaratiladigan maxsus tuzilma.
📖 Kitobdagi “mundarija” kabi o‘ylang: indeks bo‘lsa, kerakli sahifani varaqlamasdan topasiz.
🔹 Indekssiz qidiruv
❌ Jadvalni boshidan oxirigacha tekshiradi (Full Table Scan). Millionlab yozuv bo‘lsa — juda sekin.
🔹 Indeks bilan qidiruv
✅ Endi DB email bo‘yicha maxsus daraxt tuzilmasidan foydalanadi. Qidiruv 10 baravar tezroq bo‘lishi mumkin.
🔹 Indeks turlari
• B-Tree → eng ko‘p ishlatiladi, tartiblangan qidiruv uchun.
• Hash → faqat = taqqoslash uchun.
• Unique → takroriy qiymatlarga ruxsat bermaydi.
• Composite → bir nechta ustunga indeks.
• Full-Text → matn bo‘yicha qidiruv.
⚠️ Indeksning kamchiliklari
• INSERT/UPDATE/DELETE sekinlashadi → chunki indeks ham yangilanadi.
• Disk joyini ko‘proq oladi.
👉 Shuning uchun:
• Ko‘p o‘qiladigan ustunlarga indeks qo‘ying.
• Ko‘p yoziladigan ustunlarda ehtiyot bo‘ling.
📌 Xulosa
• Indeks = tez qidiruv
• Afzallik → SELECT tezlashadi
• Kamchilik → yozish amallari sekinlashadi
🔑 Qoida: ko‘p qidiriladigan ustunlarga indeks qo‘yish, boshqa joylarda esa ehtiyotkor bo‘lish.
Indeks nima?
➡️ Indeks — bu jadvaldagi ma’lumotlarni tezroq topish uchun yaratiladigan maxsus tuzilma.
📖 Kitobdagi “mundarija” kabi o‘ylang: indeks bo‘lsa, kerakli sahifani varaqlamasdan topasiz.
🔹 Indekssiz qidiruv
SELECT * FROM users WHERE email = 'ali@example.com';
❌ Jadvalni boshidan oxirigacha tekshiradi (Full Table Scan). Millionlab yozuv bo‘lsa — juda sekin.
🔹 Indeks bilan qidiruv
CREATE INDEX idx_users_email ON users(email);
✅ Endi DB email bo‘yicha maxsus daraxt tuzilmasidan foydalanadi. Qidiruv 10 baravar tezroq bo‘lishi mumkin.
🔹 Indeks turlari
• B-Tree → eng ko‘p ishlatiladi, tartiblangan qidiruv uchun.
• Hash → faqat = taqqoslash uchun.
• Unique → takroriy qiymatlarga ruxsat bermaydi.
• Composite → bir nechta ustunga indeks.
• Full-Text → matn bo‘yicha qidiruv.
⚠️ Indeksning kamchiliklari
• INSERT/UPDATE/DELETE sekinlashadi → chunki indeks ham yangilanadi.
• Disk joyini ko‘proq oladi.
👉 Shuning uchun:
• Ko‘p o‘qiladigan ustunlarga indeks qo‘ying.
• Ko‘p yoziladigan ustunlarda ehtiyot bo‘ling.
📌 Xulosa
• Indeks = tez qidiruv
• Afzallik → SELECT tezlashadi
• Kamchilik → yozish amallari sekinlashadi
🔑 Qoida: ko‘p qidiriladigan ustunlarga indeks qo‘yish, boshqa joylarda esa ehtiyotkor bo‘lish.
👍1
📌 RabbitMQ – Message Broker nima va nima uchun kerak? 🐇📩
🔹 RabbitMQ — bu xabar vositachisi bo‘lib, dasturlar o‘rtasida xabarlarni uzatishni osonlashtiradi. Ya’ni, Producer (jo‘natuvchi) xabar yuboradi, Consumer (qabul qiluvchi) esa uni oladi. Xabarlar esa Queue (navbat) orqali saqlanadi va tarqatiladi.
✅ Asosiy tushunchalar:
• Producer – xabar yuboradi.
• Exchange – qaysi queue’ga xabar tushishini belgilaydi.
• Queue – xabarlarni vaqtincha saqlaydi.
• Consumer – xabarlarni qabul qilib, ishlov beradi.
💡 Qayerda qo‘llanadi?
• Mikroservislar o‘rtasida aloqa qilishda 🔗
• Fon vazifalarni bajarishda (background jobs) ⚙️
• Real-time xabar almashishda (chat, monitoring) 📡
• Katta hajmdagi ma’lumotlarni navbat bilan qayta ishlashda 📊
🐍 Python misol (pika bilan):
📤 Xabar yuborish (Producer):
📥 Xabar olish (Consumer):
🚀 Xulosa: RabbitMQ dasturiy ta’minotlar o‘rtasida mustaqil va ishonchli xabar almashish imkonini beradi. Bu ayniqsa mikroservis arxitekturasi uchun juda muhim.
O'rnatish bo'yicha komentariyada👇
🔹 RabbitMQ — bu xabar vositachisi bo‘lib, dasturlar o‘rtasida xabarlarni uzatishni osonlashtiradi. Ya’ni, Producer (jo‘natuvchi) xabar yuboradi, Consumer (qabul qiluvchi) esa uni oladi. Xabarlar esa Queue (navbat) orqali saqlanadi va tarqatiladi.
✅ Asosiy tushunchalar:
• Producer – xabar yuboradi.
• Exchange – qaysi queue’ga xabar tushishini belgilaydi.
• Queue – xabarlarni vaqtincha saqlaydi.
• Consumer – xabarlarni qabul qilib, ishlov beradi.
💡 Qayerda qo‘llanadi?
• Mikroservislar o‘rtasida aloqa qilishda 🔗
• Fon vazifalarni bajarishda (background jobs) ⚙️
• Real-time xabar almashishda (chat, monitoring) 📡
• Katta hajmdagi ma’lumotlarni navbat bilan qayta ishlashda 📊
🐍 Python misol (pika bilan):
📤 Xabar yuborish (Producer):
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Salom, RabbitMQ!')
print("✅ Xabar yuborildi!")
connection.close()
📥 Xabar olish (Consumer):
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print("📩 Xabar keldi:", body.decode())
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print('⌛️ Kutilyapti...')
channel.start_consuming()
🚀 Xulosa: RabbitMQ dasturiy ta’minotlar o‘rtasida mustaqil va ishonchli xabar almashish imkonini beradi. Bu ayniqsa mikroservis arxitekturasi uchun juda muhim.
O'rnatish bo'yicha komentariyada👇
👍1
🥕 Celery nima o‘zi?
Tasavvur qiling, siz web dastur tuzyapsiz.
Foydalanuvchi ro‘yxatdan o‘tsa, unga email yuborish kerak.
Agar siz bu emailni asosiy dasturda yuborsangiz — foydalanuvchi kutib qoladi 😕
Lekin siz “email yuborish” ishini orqa fonda bajarishni xohlasangiz,
sizga Celery yordam beradi 🚀
☘️ Oddiy qilib aytganda:
Celery — bu sizning dasturingizda og‘ir ishlarni orqa fonda bajaradigan yordamchi.
Masalan:
• Email yuborish 📧
• Rasmni qayta ishlash 🖼
• Hisobot tayyorlash 📊
Dastur esa foydalanuvchiga darhol javob beradi ⚡️
Celery esa fonida tinchgina ishni bajaradi 😎
🔧 Celery’ning qisqa tavsifi:
• Celery - Fon vazifalarni boshqaruvchi tizim
• Worker - Orqa fonda ishlovchi “ishchi”
• Broker (Redis/RabbitMQ) - Vazifalar ro‘yxati (navbat)
• Backend - Natijalarni saqlovchi joy
Xullas, Celery — bu sizga yordamchi barista ☕️
Siz buyurtma berasiz, u esa orqa fonda bajaradi!
⚙️ Komentariyada 👇:
👉 “Celery qanday ishlaydi?”
👉 “Broker va Worker nima o‘zi?”
👉 “Celeryni qachon ishlatish kerak?”
Tasavvur qiling, siz web dastur tuzyapsiz.
Foydalanuvchi ro‘yxatdan o‘tsa, unga email yuborish kerak.
Agar siz bu emailni asosiy dasturda yuborsangiz — foydalanuvchi kutib qoladi 😕
Lekin siz “email yuborish” ishini orqa fonda bajarishni xohlasangiz,
sizga Celery yordam beradi 🚀
☘️ Oddiy qilib aytganda:
Celery — bu sizning dasturingizda og‘ir ishlarni orqa fonda bajaradigan yordamchi.
Masalan:
• Email yuborish 📧
• Rasmni qayta ishlash 🖼
• Hisobot tayyorlash 📊
Dastur esa foydalanuvchiga darhol javob beradi ⚡️
Celery esa fonida tinchgina ishni bajaradi 😎
🔧 Celery’ning qisqa tavsifi:
• Celery - Fon vazifalarni boshqaruvchi tizim
• Worker - Orqa fonda ishlovchi “ishchi”
• Broker (Redis/RabbitMQ) - Vazifalar ro‘yxati (navbat)
• Backend - Natijalarni saqlovchi joy
Xullas, Celery — bu sizga yordamchi barista ☕️
Siz buyurtma berasiz, u esa orqa fonda bajaradi!
⚙️ Komentariyada 👇:
👉 “Celery qanday ishlaydi?”
👉 “Broker va Worker nima o‘zi?”
👉 “Celeryni qachon ishlatish kerak?”
🪄 Python Magiyasi #1
Kodga qarang 👇
🤔 Sizningcha, bu kodning natijasi nima chiqadi? Javoblaringizni izohlarda kutib qolamiz!
Kodga qarang 👇
print(True + True + False)
🤔 Sizningcha, bu kodning natijasi nima chiqadi? Javoblaringizni izohlarda kutib qolamiz!
❤1
🎯 FastStream — Pythonda asinxron xabar almashish (message broker) uchun qulay freymvork
FastStream yordamida Kafka, RabbitMQ yoki Redis bilan producer / consumer (ya’ni yuboruvchi va qabul qiluvchi) kod yozish juda oson bo‘ladi.
🧩 O‘rnatish:
⚙️ Oddiy misol (RabbitMQ bilan):
🏃 Ishga tushirish:
🔹 Bu kod RabbitMQ orqali xabar yuboradi va shu zahoti uni qayta o‘qib, ekranga chiqaradi.
🔹 Asinxron ishlaydi (async/await), Pydantic bilan validatsiya ham qo‘llab-quvvatlanadi.
💡 Qisqacha:
FastStream — bu FastAPI singari, lekin xabar brokerlari uchun.
U mikroxizmatlar orasida tez, typed va oson aloqa o‘rnatish imkonini beradi.
FastStream yordamida Kafka, RabbitMQ yoki Redis bilan producer / consumer (ya’ni yuboruvchi va qabul qiluvchi) kod yozish juda oson bo‘ladi.
🧩 O‘rnatish:
# faqat asosiy qismi
pip install faststream
# RabbitMQ uchun:
pip install "faststream[rabbit]"
# Kafka uchun:
pip install "faststream[kafka]"
⚙️ Oddiy misol (RabbitMQ bilan):
from faststream import FastStream
from faststream.rabbit import RabbitBroker
broker = RabbitBroker("amqp://guest:guest@localhost:5672/")
app = FastStream(broker)
@broker.subscriber("hello")
async def handle(msg):
print("📩 Qabul qilindi:", msg)
@app.after_startup
async def send():
await broker.publish("Salom FastStream!", "hello")
🏃 Ishga tushirish:
faststream run app:app
🔹 Bu kod RabbitMQ orqali xabar yuboradi va shu zahoti uni qayta o‘qib, ekranga chiqaradi.
🔹 Asinxron ishlaydi (async/await), Pydantic bilan validatsiya ham qo‘llab-quvvatlanadi.
💡 Qisqacha:
FastStream — bu FastAPI singari, lekin xabar brokerlari uchun.
U mikroxizmatlar orasida tez, typed va oson aloqa o‘rnatish imkonini beradi.