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
🚀 PyAutoGUI — Kompyuteringizni avtomatlashtirish kutubxonasi

Pythonni yanada qiziqarli qiladigan kutubxona haqida bilasizmi?
PyAutoGUI yordamida siz:
Skrinshot olishingiz
Sichqonchani kerakli nuqtaga olib borishingiz
Dastur oynalari bilan ishlashingiz
Avtomatik yozishingiz (so‘z, jumla yoki butun paragraf)
Hattoki Googleda izlashni ham topshirishingiz mumkin 😎

🔹 Oddiy klikerni yaratish:
import pyautogui
import time


def click():
time.sleep(5)
# sichqoncha qayerda turgan bo'lsa o'sha joyga klik qiladi
pyautogui.click()


def main():
for i in range(20):
click()

# Ekranning to‘liq scrinshotini olish
screenshot = pyautogui.screenshot()

# olingan scrinshotni fayl sifatida saqlash
screenshot.save("screenshot.png")


if __name__ == '__main__':
main()


💡 Faqat bir necha qator kod bilan kompyuteringiz siz uchun ishlaydi!

Googleda qiriruvni PyAutoGUI orqali avtomatlashtirish komentariyada keltirilgan👇

📘 To‘liq hujjatlar:
👉 https://pyautogui.readthedocs.io/en/latest/
🔥3
⚙️ Pickle – Python obyektlarini saqlash vositasi

📊 Ma’lumotlar hajmi oshgani sari ularni tez va qulay saqlash muhim bo‘lib bormoqda. Odatda biz CSV yoki JSONdan foydalanamiz, lekin ular faqat matn ko‘rinishida ishlaydi.

🗂 Pickle esa Pythonning maxsus fayl formati bo‘lib, obyektlarni (list, dict, DataFrame, model va h.k.) to‘liq shaklda saqlash va qayta yuklash imkonini beradi.

🔑 Afzalliklari:

• Python obyektlarini to‘g‘ridan-to‘g‘ri saqlaydi (CSV faqat jadval uchun qulay).
• Ko‘pincha CSV/JSONdan tezroq ishlaydi (80 barobargacha).
• Fayl hajmi odatda kichikroq bo‘ladi (ya'ni kam xotira).

⚠️ Cheklovlari:

Faqat Pythonda ochiladi (CSV/JSON esa universal).
• Ikkilamchi format bo‘lgani uchun ochishda xavfsizlikka e’tibor berish kerak. Ishonchsiz manbadan kelgan Pickle faylini ochish tavsiya etilmaydi.

📝 Oddiy misol:
import pickle  

# Saqlash
data = {"ism": "Ali", "yosh": 25}
with open("data.pkl", "wb") as f:
pickle.dump(data, f)

# Yuklash
with open("data.pkl", "rb") as f:
yuklangan = pickle.load(f)

print(yuklangan) # {'ism': 'Ali', 'yosh': 25}


📌 Xulosa:
Pickle – bu tez va qulay, lekin asosan Python obyektlarini saqlash uchun mo‘ljallangan format. Agar ma’lumotni boshqa dasturlarda ham ishlatmoqchi bo‘lsangiz – CSV yoki JSON qulayroq bo‘ladi.
🔥1
⚙️ secrets — tasodifiy sonlar va belgilar generatsiyasi uchun

ℹ️ O‘z xabarlarga kodlash funksiyalarini yozish juda qiziqarli bo‘lishi mumkin, ammo ular sinovdan o‘tgan va xavfsizlik talablariga javob beradigan secrets kutubxonasidagi funksiyalar kabi ishonchli bo‘lmasligi mumkin.

🗣 Shu kutubxonada siz eng murakkab parollar, xavfsizlik tokenlari va ularga oid maxfiy ma’lumotlar uchun zarur bo‘lgan tasodifiy sonlar va belgilarni yaratish imkoniyatlarini topasiz.

Qisqacha izoh:

token_hex(n) – hex ko‘rinishida 2n belgili token (keng tarqalgan format).
token_urlsafe(n) – URL yoki JWT singari joylarda xavfsiz ishlatish mumkin.
secrets.choice(seq) – kriptografik tasodifiy tanlash.
secrets.randbelow(n) – 0…n-1 oralig‘ida tasodifiy butun son.
secrets.compare_digest(a, b) – vaqtga bog‘liq bo‘lmagan, “timing attack”ga chidamli taqqoslash.
secrets.randbits(k) – k bitli tasodifiy butun son.

Misol komentariyada 👇
1🔥1
🔔 VisPy — Pythonda GPU tezlashgan vizualizatsiya

👨‍💻 VisPy — bu Python kutubxonasi bo‘lib, OpenGL imkoniyatlaridan foydalanadi va yuqori samarali 2D hamda 3D interaktiv grafikalar yaratish uchun ishlatiladi.

Asosiy imkoniyatlari:

• GPU yordamida tezkor chizish 🚀
2D va 3D vizualizatsiyalar (grafiklar, shakllar, meshlar)
Interaktivlik (sichqoncha bilan aylantirish, zoom qilish)
Animatsiyalar va real-time ma’lumotlarni ko‘rsatish


🌐 Batafsil: vispy.org, ishlashi uchun PyQt yoki shunga o'xshash birorta GUI backend o'rnatish kerak!

🖼 Oddiy misol: 3D kub (qizil yuzalar, ko‘k qirralar)
import numpy as np
from vispy import app, scene

canvas = scene.SceneCanvas(keys='interactive', bgcolor='white', size=(600, 600), show=True)
view = canvas.central_widget.add_view()

pos = np.array([
[-1,-1,-1],[-1,-1,1],[-1,1,-1],[-1,1,1],
[1,-1,-1],[1,-1,1],[1,1,-1],[1,1,1]
], dtype=np.float32)

edges = np.array([
[0,1],[0,2],[0,4],[1,3],[1,5],[2,3],
[2,6],[3,7],[4,5],[4,6],[5,7],[6,7]
])

faces = np.array([
[0,1,2],[1,3,2],[4,6,5],[5,6,7],
[0,4,1],[1,4,5],[2,3,6],[3,7,6],
[0,2,4],[2,6,4],[1,5,3],[3,5,7]
])

scene.visuals.Mesh(vertices=pos, faces=faces, color=(1,0,0,0.6), parent=view.scene)
scene.visuals.Line(pos=pos, connect=edges, color='blue', width=2, parent=view.scene)

view.camera = scene.cameras.TurntableCamera(fov=45, elevation=30, azimuth=30)
app.run()


Misol: Animatsiya yaratish

import numpy as np
from vispy import app, scene

# 3D sahna
canvas = scene.SceneCanvas(keys='interactive', bgcolor='white', size=(800, 600), show=True)
view = canvas.central_widget.add_view()

# To‘lqin uchun grid (x, y koordinatalar)
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

# Mesh (3D sirt)
surface = scene.visuals.SurfacePlot(x=x, y=y, z=Z,
color=(0.3, 0.5, 1, 0.9),
shading='smooth',
parent=view.scene)

# Kamera sozlamalari
view.camera = scene.cameras.TurntableCamera(fov=45, elevation=60, azimuth=30)

# Animatsiya uchun vaqt parametri
t = 0

def update(event):
global t
t += 0.1
Z = np.sin(X*0.5 + t) * np.cos(Y*0.5 + t)
surface.set_data(z=Z)

# Har 50 ms da yangilash (20 FPS)
timer = app.Timer(interval=0.05, connect=update, start=True)

if __name__ == '__main__':
app.run()
🔹 Python: isspace() metodi

isspace() — bu satr metodi, u satr faqatgina bo‘sh joy belgilaridan iboratligini tekshiradi.
Probel ( ), tabulyatsiya (\t), yangi qator (\n) va shunga o‘xshash belgilar bo‘sh joy sifatida qabul qilinadi.

📌 Muhim: isspace() satrni o‘zgartirmaydi, faqat True yoki False qiymat qaytaradi.

🔍 Misol:
matn1 = "   "
matn2 = "salom"

print(matn1.isspace()) # True
print(matn2.isspace()) # False


👉 Ko‘rinib turibdiki, matn1 faqat probel bo‘lgani uchun True, lekin matn2 da matn borligi sababli False.
👀1
🚀 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:
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👇
🔥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:
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:
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.
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:
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:
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):
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)
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.
🔥21
📊 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):
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:
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:

🔹 IntEnumint tipidan meros oladi. Qiymatlar son sifatida ishlaydi.

🔹 StrEnumstr 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 👇
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! 😉
👍1