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: __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
🚀 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