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
💻 Python + WebTexnologiyalar = Pywebview

Siz Python yordamida desktop ilovalar yaratmoqchimisiz, lekin GUI bilan bosh qotirmoqchi emassiz? 🤔

Pywebview – bu kichik, ammo qudratli kutubxona:

• HTML, CSS va JavaScript yordamida interfeys yaratish mumkin
• OS-ning ichki web-dvigatelidan foydalanadi (Windows, macOS, Linux)
• Oddiy web-sahifani desktop oynasida ochish oson

Yuqoridagi kodning natijasida (paydo bo'ladigan oyna komentda 👇):
Oyna paydo bo‘ladi
Google sahifasi ochiladi

Foydali jihatlar:

• Web-ilovalarni desktopga oson ko‘chirish
• Python va JS ni integratsiya qilish
• Lokal HTML yoki onlayn sahifalarni ishlatish

Yana bir foydali tomoni:
• Siz brauzerda iz qoldirishni xoxlamaysiz!
👍1
🚀 Python GILsiz: Ko‘p oqimlilikning yangi davri

Python 3.13 da tajriba sifatida Global Interpreter Lock (GIL) ni o‘chirib qo‘yish imkoniyati paydo bo‘ldi.
GIL — Pythonning yillar davomida haqiqiy ko‘p oqimli ishlashini cheklab kelgan mexanizmi edi.

🔬 Endi odatiy va free-threaded (GILsiz) versiyalarni solishtirish mumkin.
CPU bilan bog‘liq og‘ir vazifalarda 4 ta oqim ishlatilganda 3-4 baravar tezlik oshishi kuzatilgan.

⚠️ Lekin buning narxi bor:

• Xotira boshqaruvi murakkablashadi
• Yangi garbage collector tizimi kerak bo‘ladi
• Ba’zi obyektlar “o‘lmas” bo‘lib qoladi

📅 Hozircha free-threaded Python ixtiyoriy, lekin Python 3.14 dan boshlab standart bo‘lishi mumkin.
Asosiy savol — hamjamiyat va kutubxonalar qanchalik tez moslashadi?
zip() — Pythonda parallel iteratsiya qilish vositasi 🔗🐍

zip() — bu Python’ning ichki funksiyasi bo‘lib, bir nechta iteratsiya qilinadigan obyektlarni (list, tuple va boshqalar) elementlarini juftlab birlashtiradi.

📌 Oddiy misol:
names = ["Ali", "Vali", "Hasan"]
ages = [25, 30, 28]

for name, age in zip(names, ages):
print(f"{name} — {age} yoshda")


Natija:
Ali — 25 yoshda  
Vali — 30 yoshda
Hasan — 28 yoshda


💡 Asosiy xususiyatlar:

1. Eng qisqa uzunlik bo‘yicha ishlaydi — ro‘yxatlar uzunligi turlicha bo‘lsa, eng qisqa uzunlikka qarab kesiladi.
2. list() bilan ro‘yxatga, dict bilan lug'atga aylantirish mumkin:
pairs = list(zip(names, ages))
print(pairs) # [('Ali', 25), ('Vali', 30), ('Hasan', 28)]

my_dict = dict(pairs)
print(my_dict) # {'Ali': 25, 'Vali': 30, 'Hasan': 28}


3. * yordamida ajratish mumkin:
unzipped_names, unzipped_ages = zip(*pairs)
print(unzipped_names) # ('Ali', 'Vali', 'Hasan')


Foydali: parallel ro‘yxatlarni bir vaqtda aylanish, juftliklar yaratish, CSV ma’lumotlarini bog‘lash va boshqalar.
IceCream — Pythonda oddiy va qulay debug vositasi 🍦🐍

IceCream — bu kodni oddiy va samarali tarzda debug qilish uchun mo‘ljallangan kutubxona.
print() dan foydalanish o‘rniga, IceCream kutubxonasidagi ic() funksiyasi yordamida o‘zgaruvchilarni, ifodalarni va bajarilishni bitta chaqiriqda tekshirishingiz mumkin.

🔹 Natija:
ic| result: 6


Bu yerda ic| — IceCream chiqishini bildiradi, result: 6 esa o‘zgaruvchi nomi va qiymatini ko‘rsatadi.

💡 IceCream:

• Har qanday joyda ishlaydi — web-dasturlash, ilmiy hisob-kitob, ma’lumotlar tahlili va boshqalar.
• print() ga qaraganda ancha ixcham va qulay.

📦 O‘rnatish:
pip install icecream
Bottleneck — NumPyni chaqqonlashtiruvchi kutubxona ⚡️🐍

Bottleneck — bu NumPy usullarini 25 baravargacha tezlashtiruvchi Python kutubxonasi, ayniqsa massivda NaN qiymatlar bo‘lsa juda foydali.

📌 Misol:
Rasmda biz 1000×10 o‘lchamdagi tasodifiy sonlardan iborat 2D massiv yaratamiz. So‘ngra move_mean funksiyasi yordamida har bir qatorda skolzyashiy o‘rtacha (moving average) hisoblaymiz.

• window → necha ta qiymat o‘rtacha hisobga kiritilishini belgilaydi.
• axis → qaysi yo‘nalishda hisoblashni ko‘rsatadi (axis=1 → har bir qatorda hisoblash).

💡 Bottleneck katta hajmdagi ma’lumotlarni tez va samarali qayta ishlashda ayniqsa foydali.
Molten — Python’da zamonaviy API framework ⚡️🐍

Molten — bu zamonaviy, modulga asoslangan va testlashga qulay API yaratish uchun mo‘ljallangan Python framework.
U quyidagi imkoniyatlarni taqdim etadi:

• RESTful API lar yaratish
• Modulli tuzilma
• Yaxshi testlash imkoniyati
• Oddiy va tushunarli sintaksis

📌 Misol: Rasmdagi kodda bitta / marshrutga ega oddiy web-ilova yaratiladi. U JSON formatida salomlashuv xabarini qaytaradi. Dastur 8000-portda lokal serverda ishga tushiriladi.

🔹 Ishga tushirish:
pip install molten
python app.py



🔹 Natija: Brauzerda http://localhost:8000 ga kirsangiz:
{"message": "Salom, Molten!"}


💡 Molten — kichik, tez va modulga asoslangan API lar yaratish uchun ajoyib tanlov.
2👍1
🔮 Python: __repr__ metodi

__repr__ — bu Pythondagi magik metod bo‘lib, obyektning matn ko‘rinishini aniqlaydi.
U obyektni repr() funksiyasi orqali yoki oddiygina print() orqali chiqarishda ishlatiladi.

👉 Nega kerak?

1. Obyekt haqida foydali ma’lumot chiqaradi.
2. Oddiy <Book object at 0x12345> ko‘rinishidan ko‘ra aniqroq.
3. Debug qilish jarayonida juda qulay.

📝 Misol:
class Book:
def __init__(self, title, author, year):
self.title = title
self.author = author
self.year = year

def __repr__(self):
return f"Book(title='{self.title}', author='{self.author}', year={self.year})"

kitob = Book("1984", "George Orwell", 1949)

print(kitob) # Book obyektining ko‘rinishini chiqaradi
print(repr(kitob)) # Xuddi shunday ishlaydi



🖥 Natija:
Book(title='1984', author='George Orwell', year=1949)
Book(title='1984', author='George Orwell', year=1949)



Shunday qilib, __repr__ obyektlaringizni o‘qilishi oson va tushunarli ko‘rinishda chiqarishga yordam beradi.
🟢 SQLAlchemyda lazy yuklash strategiyalari (misollar bilan)

Keling, User va Address jadvallaridan foydalanib ko‘ramiz:
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
addresses = relationship("Address", back_populates="user", lazy="...")

class Address(Base):
__tablename__ = "addresses"
id = Column(Integer, primary_key=True)
email = Column(String)
user_id = Column(Integer, ForeignKey("users.id"))
user = relationship("User", back_populates="addresses")


🔹 1. lazy="select" (default)

Bog‘liq obyekt faqat chaqirilgandagina yuklanadi, agar chaqirilmasa yuklab o'tirilmaydi.
users = session.query(User).all()  
# SELECT * FROM users

for user in users:
print(user.addresses)
# Har bir user uchun alohida so‘rov:
# SELECT * FROM addresses WHERE user_id = ?

👉 10 ta foydalanuvchi bo‘lsa → 1 + 10 ta query.
Bu N+1 muammo.

🔹 2. lazy="joined"

SQLAlchemy JOIN orqali hammasini birdan yuklaydi, ya'ni bitta so'rovi o'zida tablitsalarni birlashtirib bitta tablitsa sifatida yuklab oladi.
users = session.query(User).all()  
# SELECT users.*, addresses.*
# FROM users LEFT OUTER JOIN addresses ON users.id = addresses.user_id

👉 Faqat 1 ta query.
Har doim manzillar kerak bo‘lsa yaxshi.
Katta jadvalda User qatorlari ko‘payib ketishi mumkin, chunki dublikat muammosi bor.

🔹 3. lazy="subquery"

Avval foydalanuvchilar olinadi, keyin subquery bilan manzillar.
users = session.query(User).all()  
# SELECT * FROM users
# SELECT addresses.* FROM addresses
# WHERE addresses.user_id IN (subquery)

👉 Umumiy 2 ta query.
JOINdagi duplication muammosini hal qiladi.
Hamma manzillarni birdan yuklaydi.

🔹 4. lazy="selectin"

Avval foydalanuvchilar olinadi. Keyin manzillar IN (...) query orqali yuklanadi.
users = session.query(User).all()  
# SELECT * FROM users
# SELECT addresses.* FROM addresses
# WHERE addresses.user_id IN (1, 2, 3, ..., N)

👉 2 ta query (subquery emas, IN ishlatiladi).
Juda samarali va N+1 muammosini hal qiladi.


📌 Xulosa:

1. select → kerak bo‘lganda, lekin katta ro‘yxatda sekin.
2. joined → har doim kerak bo‘lsa, tezroq.
3. subquery → JOIN duplication muammosidan qochish uchun.
4. selectin → eng balansli va samarali usul.
1
Pythondagi inf (Infinity) — qisqa tushuntirish

inf (infinity) — bu cheksizlikni bildiruvchi maxsus son. U oddiy raqam emas, balki matematik cheksizlikni ifodalaydi.

👉 Pythonda uni olish yo‘llari:
float('inf')      # ijobiy cheksizlik
float('-inf') # manfiy cheksizlik
import math
math.inf # ijobiy cheksizlik


Asosiy xossalari:

inf istalgan real sondan katta, -inf esa istalgan sondan kichik
• Hisoblashda qatnashsa, natija odatda inf bo‘lib qoladi (inf + 1 = inf)
• Ayrim amallar nan (Not-a-Number) qaytaradi: inf - inf, 0 * inf

Qayerda ishlatiladi?

Sentinel qiymat sifatida: masalan, eng kichik qiymatni qidirishda boshlang‘ich qiymat qilib float('inf') qo‘yiladi
Matematik hisoblarda va cheksizlik bilan ishlovchi algoritmlarda

👉 Xulosa: inf — Pythondagi maxsus qiymat bo‘lib, cheksizlikni ifodalaydi va ko‘p hollarda matematik yoki algoritmik vazifalarda qulay “cheksiz katta/kichik” sifatida qo‘llaniladi.
Batafsil komentariyada 👇
📊 Pygal — SVG formatida grafiklar kutubxonasi

Pygal — bu Pythondagi ma’lumotlarni vizualizatsiya qilish kutubxonasi.
U turli xil interaktiv grafiklar yaratishga imkon beradi:

1. chiziqli (line chart)
2. ustunli (bar chart)
3. doiraviy (pie chart) va boshqalar.

📝 Misol:
import pygal

# Chiziqli diagramma obyektini yaratamiz
line_chart = pygal.Line()
line_chart.title = 'Brauzer ulushi (%)'
line_chart.x_labels = ['2016', '2017', '2018', '2019']

line_chart.add('Chrome', [56, 61, 65, 69])
line_chart.add('Firefox', [30, 25, 20, 17])
line_chart.add('Edge', [5, 7, 8, 10])

line_chart.render_to_file('browsers.svg')


Natijada SVG fayl hosil bo‘ladi (browsers.svg), uni brauzerda ochib ko‘rsangiz, interaktiv grafik chiqadi.

🔎 Afzalliklari:

1. SVG formatida bo‘lgani uchun grafiklar sifatini yo‘qotmaydi.
2. Interaktivlik (ustiga olib borilganda qiymatlar ko‘rinadi).
3. Juda sodda foydalanish.

Natijasini komentariyada ko'rishingiz mumkin:👇
🔥 Fire — Python uchun CLI generator

Fire — bu Python’da yozilgan istalgan obyekt (funksiya, klass, modul) dan avtomatik tarzda CLI (Command Line Interface) yaratib beradigan kutubxona.

👉 Asosiy foydasi:

1. Kodni tezroq debug qilish
2. Oddiy funksiyalarni terminaldan chaqirish
3. Python kodini qo‘shimcha ish qilmasdan CLI dasturiga aylantirish

Terminalda ishga tushurish:

python script.py --ism=Ali


Natija:
Salom Ali!


Ko‘rib turganingizdek, Fire funksiyadan avtomatik buyruqlar satri interfeysi yasaydi.
🔥1
Pampy — Pythonda Pattern Matching kutubxonasi 🐍

Pampy — bu pattern matching (namunaga moslashtirish) imkonini beruvchi kutubxona bo‘lib, kod yozishni sodda va tushunarli qiladi. Uni turli vaziyatlarda ishlatish mumkin:

• turli ma’lumot turlarini qayta ishlash
• rekursiv funksiyalarni yaratish
• va boshqa ko‘plab holatlar

Quyidagi misolda Pampy kutubxonasidagi match funksiyasi argument n ni turli namunalar bilan solishtiradi:

1️⃣ Agar n == 1 bo‘lsa → 1 qaytaradi.
2️⃣ Agar n == 2 bo‘lsa → 1 qaytaradi.
3️⃣ Agar yuqoridagi holatlarga mos kelmasa (_ belgisi bilan belgilanadi) → funksiya o‘zini x-1 va x-2 bilan rekursiv chaqiradi va natijalarni qo‘shadi.

📌 Misol: fibonacci(6) chaqirilsa, natija 8 chiqadi, chunki 6-chi Fibonachchi soni 8 ga teng.

💡 Pampy — kodni chiroyli, qisqa va o‘qilishi oson qilishga yordam beradi.
📌 Ellipsis (...) — Pythondagi kam ma’lum, lekin foydali ifoda

Pythonda ... uchta nuqta — bu Ellipsis (EllipsisType) deb nomlanadi. Bu — maxsus obyekt bo‘lib, ko‘p joylarda shablon, to‘ldiruvchi, yoki placeholder sifatida ishlatiladi.

🧠 1. Asosiy vazifasi"hozircha bu yerga tegmang"
... ifodasi, ko‘pincha hali yozilmagan kod, metod yoki funksiya joyiga vaqtincha qo‘yiladi:


def fly(self) -> None:
...

class UserRepository:
def get_user(self, user_id: int) -> dict:
...

🔍 raise NotImplementedError o‘rniga ishlatiladigan yengil variant. Ko‘pincha interface, abstract klasslarda yoki test/loyihalash jarayonida qo‘llaniladi.

🧩 2. NumPy’da slicing uchun
NumPy kutubxonasida ... ko‘p o‘lchovli massivlarda indekslash uchun ishlatiladi:


import numpy as np

matrix = np.zeros((3, 4, 5))
print(matrix[0, ...]) # = matrix[0, :, :]

💡 ... — qolgan barcha o‘lchovlar o‘rniga : degani. Juda qulay!

🧰 3. Custom ishlatishda: Ellipsis bu oddiy obyekt!

print(...) # Ellipsis
print(type(...)) # <class 'ellipsis'>
print(... is Ellipsis) # True

Siz ... obyektini o‘z funksiyalaringizda ham shart sifatida qo‘llashingiz mumkin:


def custom_func(x):
if x is ...:
return "No value provided"
return x

custom_func(...) # "No value provided"



🧵 Xulosa:
... — Pythonda kichik, lekin juda qulay sintaktik imkoniyat:

Kodni vaqtincha to‘ldirish (interface, abstract metodlar)
NumPy indekslashni soddalashtirish
O‘z shartlaringizda maxsus flag sifatida ishlatish


🔔 P.S. Tip anotatsiyalarda ham ishlatiladi:


def func(x: int = ...) -> None:
...

Bu x majburiy argument, lekin qiymatni keyinroq belgilayman degani (masalan, pydantic, FastAPIda).
🤣1
💻 Python yordamida dollar va yevro kursini bilib oling! 💵💶

📌 O‘zbekiston Markaziy Banki ochiq API orqali istalgan valyutaning so‘mga nisbatan kursini olish mumkin. Kod juda oddiy:
import requests

# USD kursi
usd = requests.get("https://cbu.uz/oz/arkhiv-kursov-valyut/json/USD/").json()[0]["Rate"]
print(f"1 USD = {usd} UZS")

# EUR kursi
eur = requests.get("https://cbu.uz/oz/arkhiv-kursov-valyut/json/EUR/").json()[0]["Rate"]
print(f"1 EUR = {eur} UZS")


🔎 Natija:
1 USD = 12354.65 UZS
1 EUR = 14384.52 UZS


⚡️ Eng muhimi — kurslar to‘g‘ridan-to‘g‘ri Markaziy Bankdan olinadi va doim yangilanib turadi!
👍1
🐍 Python Generator Tuzog'i!

Bu kod qanday natija beradi? 🤔
tuple_x = (i*i for i in range(5))

print(sum(tuple_x))
print(sum(tuple_x))

Javob: 30 va 0 🎯

Nima bo'lyapti?

(i*i for i in range(5)) - bu generator expression (tuple emas!).

Generator bir marta ishlatiladi va tugaydi:
1️⃣ Birinchi sum(): 0+1+4+9+16 = 30
2️⃣ Ikkinchi sum(): generator tugagan = 0

Yechim:
#  List
numbers = [i*i for i in range(5)]
print(sum(numbers)) # 30
print(sum(numbers)) # 30

# Yoki tuple
numbers = tuple(i*i for i in range(5))
print(sum(numbers)) # 30
print(sum(numbers)) # 30

Generator = bir martalik bilet! 🎫
🔥1🥰1
🐍 Python: list vs deque

Pythonda ma’lumotlar tuzilmasini tanlash ishlash tezligi va xotira samaradorligi uchun juda muhim.
Eng ko‘p ishlatiladigan ikkita tuzilma: list va collections.deque.

1️⃣ list — dinamik massiv

Afzalliklari

• Indeks orqali tezkor o‘qish va yozish → O(1)
• Oxiriga element qo‘shish / o‘chirish → amortizatsiyalangan O(1)
• Oddiy sintaksis, ko‘p Python funksiyalari bilan mos

Kamchiliklari

• Boshida element qo‘shish/olish → sekin (O(n))
• O‘rta joyga insert/remove → O(n)
• Katta navbat yoki sliding window masalalarida samarador emas

2️⃣ deque — ikki tomondan navbat (double-ended queue)

Afzalliklari

• Chap va o‘ng oxiridan tezkor qo‘shish va o‘chirish → O(1)
• Sliding window, queue va stack kabi algoritmlarda ideal
• rotate(), maxlen kabi qulay metodlar
• Katta hajmli ma’lumotlar bilan ishlaganda listga qaraganda tezroq

Kamchiliklari


• Indeks bo‘yicha o‘qish → sekin (O(n))
• O‘rta joyga insert/remove ham sekin → O(n)
• Har bir element bloklarda saqlangani uchun list’ga qaraganda xotira ishlatishi biroz ko‘proq

3️⃣ Qachon qaysi birini tanlash?

1. deque - Oxirdan tezkor qo‘shish/olish, indeks kerak emas
2. list - Oxirdan tezkor qo‘shish/olish va indeks bo‘yicha tez o‘qish
3. deque - Chapdan tezkor qo‘shish/olish, navbat / sliding window
4. list - Kichik o‘lchamdagi massiv, oddiy o‘qish/yozish

📌 Xulosa:

• list → indeks va oxirga mos, oddiy massivlar.
• deque → ikki tomondan tezkor navbat, stack, sliding window, katta ma’lumotlar.
🕊1
Forwarded from Botir Ziyatov
Dam olish kunlari uchun kino.

Kecha Python dasturlash tilida haqida kino chiqdi!

Amsterdam shahridan boshlangan oddiy loyiha qanday qilib dunyoning eng mashhur dasturlash tiliga aylanganini koʻrsatadigan 84 daqiqalik film.

Filmda: Gvido van Rossum dan tortib bu ish ortida turgan odamlar ham qatnashgan.

Nima haqida:
🔘1989-yil, 2 hafta davomida qanday qilib til yaratilgani
🔘ABC tilidan Python qanday paydo boʻlgani
🔘 1994-yildagi birinchi konferensiya (faqat 20 kishi qatnashgani)
🔘 Pythonning deyarli yoʻq boʻlib ketish xavfi va uni qutqargan odamlar

va yana shunday qiziq ma'lumotlar keltirilgan.

Kinoni ishlab chiqish uchun bir yildan ortiq vaqt sarflangan.

tomosha qilish

@botirziyatov
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
📄 Pythonda PDFdan matn olish 3 xil usulda

Ko‘pincha PDF fayllardan matn olishga to‘g‘ri keladi. Buni qo‘lda nusxa olish zerikarli va noqulay. Pythonda esa bu ishni osongina avtomatlashtirish mumkin.

🔹 1-usul: PyMuPDF (fitz)
Eng tez va kuchli kutubxona. Murakkab PDFlarda ham yaxshi ishlaydi.
import fitz

doc = fitz.open("sample.pdf")
print("Sahifalar soni:", len(doc))
print(doc[0].get_text("text")) # 1-betdagi matn

text = ""
for page in doc:
text += page.get_text("text") + "\n"

print(text)


🔹 2-usul: pdfplumber
Jadval va formatlangan matnlarni chiqarishda juda qulay.
import pdfplumber

text = ""
with pdfplumber.open("sample.pdf") as pdf:
for page in pdf.pages:
text += page.extract_text() + "\n"

print(text)


🔹 3-usul: PyPDF2
Eng oddiy variant. Ko‘p hollarda ishlaydi, lekin ba’zida formatlashni yo‘qotadi.
from PyPDF2 import PdfReader

reader = PdfReader("sample.pdf")
text = ""
for page in reader.pages:
text += page.extract_text() + "\n"

print(text)


Xulosa:

• Agar oddiy matn kerak bo‘lsa → PyPDF2.
• Jadval yoki strukturali matn bo‘lsa → pdfplumber.
• Kuchli va tez ishlashini xohlasangiz → PyMuPDF (fitz).
1👏1
📌 Bugungi Python darsi

🔹 Mavzu: PDF faylga jadval yaratish
🔹 Kutubxona: reportlab

Ko‘pincha hisobotlarni jadval shaklida PDF qilib chiqarish kerak bo‘ladi. Buni Pythonda juda oson qilish mumkin:
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

# PDF fayl nomi
pdf = SimpleDocTemplate("hisobot.pdf", pagesize=A4)

# Jadval ma'lumotlari
data = [
["№", "Ism", "Familiya", "Ball"],
[1, "Ali", "Valiyev", 85],
[2, "Laylo", "Karimova", 92],
[3, "Javlon", "Ismoilov", 74],
]

# Jadval yaratish
table = Table(data)

# Jadvalga style beramiz
style = TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.grey),
("TEXTCOLOR", (0, 0), (-1, 0), colors.whitesmoke),
("ALIGN", (0, 0), (-1, -1), "CENTER"),
("GRID", (0, 0), (-1, -1), 1, colors.black),
])
table.setStyle(style)

# PDFga yozamiz
pdf.build([table])

print(" PDF saqlandi: hisobot.pdf")


⚙️ O‘rnatish:
pip install reportlab


📂 Natija: hisobot.pdf nomli fayl papkangizda tayyor bo‘ladi va unda jadval ko‘rinadi.
1👍1