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:
Natija:
💡 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:
3. * yordamida ajratish mumkin:
✅ Foydali: parallel ro‘yxatlarni bir vaqtda aylanish, juftliklar yaratish, CSV ma’lumotlarini bog‘lash va boshqalar.
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:
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:
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.
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:
🔹 Natija: Brauzerda http://localhost:8000 ga kirsangiz:
💡 Molten — kichik, tez va modulga asoslangan API lar yaratish uchun ajoyib tanlov.
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:
🖥 Natija:
✅ Shunday qilib, __repr__ obyektlaringizni o‘qilishi oson va tushunarli ko‘rinishda chiqarishga yordam beradi.
__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:
🔹 1. lazy="select" (default)
Bog‘liq obyekt faqat chaqirilgandagina yuklanadi, agar chaqirilmasa yuklab o'tirilmaydi.
👉 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.
👉 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.
👉 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.
👉 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.
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:
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 👇
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 cheksizlikAsosiy 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:
✅ 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:👇
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:
Natija:
✅ Ko‘rib turganingizdek, Fire funksiyadan avtomatik buyruqlar satri interfeysi yasaydi.
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.
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:
🔍 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:
💡 ... — qolgan barcha o‘lchovlar o‘rniga : degani. Juda qulay!
🧰 3. Custom ishlatishda: Ellipsis bu oddiy obyekt!
Siz ... obyektini o‘z funksiyalaringizda ham shart sifatida qo‘llashingiz mumkin:
🧵 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:
Bu x majburiy argument, lekin qiymatni keyinroq belgilayman degani (masalan, pydantic, FastAPIda).
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:
🔎 Natija:
⚡️ Eng muhimi — kurslar to‘g‘ridan-to‘g‘ri Markaziy Bankdan olinadi va doim yangilanib turadi!
📌 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? 🤔
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:
Generator = bir martalik bilet! 🎫
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.
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
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:
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.
🔹 2-usul: pdfplumber
Jadval va formatlangan matnlarni chiqarishda juda qulay.
🔹 3-usul: PyPDF2
Eng oddiy variant. Ko‘p hollarda ishlaydi, lekin ba’zida formatlashni yo‘qotadi.
✨ Xulosa:
• Agar oddiy matn kerak bo‘lsa → PyPDF2.
• Jadval yoki strukturali matn bo‘lsa → pdfplumber.
• Kuchli va tez ishlashini xohlasangiz → PyMuPDF (fitz).
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:
⚙️ O‘rnatish:
📂 Natija: hisobot.pdf nomli fayl papkangizda tayyor bo‘ladi va unda jadval ko‘rinadi.
🔹 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:
💡 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/
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:
📌 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.
📊 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 👇
ℹ️ 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