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 | enumerate() vs range(len())
mevalar = ["olma", "banan", "gilos"]

# range(len())
for i in range(len(mevalar)):
print(i, mevalar[i])

# enumerate()
for i, meva in enumerate(mevalar):
print(i, meva)


🔹 enumerate() — indeks va qiymatni birgalikda, xavfsiz va xotira tejamkor tarzda beradi.
🔹 range(len()) — faqat indeks yaratadi; agar ro‘yxat o‘zgarsa IndexError yoki noto‘g‘ri natija chiqishi mumkin.
🔹 Har ikkisi ham “lazy iterator”, ya’ni barcha elementlarni birdaniga xotiraga yuklamaydi.
Lekin:
enumerate() → iteratorni joyida o‘rab oladi, elementlarni bitta-bitta oladi.
range(len()) → len() orqali obyekt uzunligini oldindan hisoblab oladi, bu esa katta iteratorlarda muammo.

🧠 Katta ma’lumot oqimi (masalan 10¹⁸ element) misolida:
range(len(iterator)) — len() butun iteratorni sanab chiqadi → xotira to‘ladi yoki ishlamaydi.
enumerate(iterator) — elementlarni lazy tarzda qaytaradi → ishlaydi, xotira sarfi minimal.

enumerate() → toza, tez, xavfsiz, katta oqimlar uchun mos
⚠️ range(len()) → faqat indeks kerak bo‘lgandagina ishlating

Batafsil ma'lumotni komentariya topishingiz mumkin👇
👏71👍1🔥1
💡 #Python | for ... else — kam ishlatiladigan, lekin foydali konstruktsiya

Pythonda for sikliga else qo‘shish mumkin. Bu sikl break orqali to‘xtamasa — ya’ni normal tugasa — bajariladi.
for item in iterable:
if condition(item):
break
else:
handle_not_found()


🧩 Ishlash mexanizmi
• for → iteratorni aylantiradi (iter + next)
• Agar sikl StopIteration orqali tugasa → else bajariladi
• Agar break ishga tushsa → else o‘tilmaydi

⚙️ Amaliy misol
users = ["ali", "vali", "salim"]

for user in users:
if user == "nozim":
print("Topildi!")
break
else:
print("Foydalanuvchi topilmadi.")


🧠 else bloki qidiruv muvaffaqiyatsiz bo‘lganda ishlaydi — flag o‘zgaruvchi yozishning toza alternativasi.

🧠 Qachon ishlatish kerak?
• Qidiruv jarayonlarida (search, lookup)
• Loop tugash holatini aniq belgilashda
• flag yoki found kabi yordamchi o‘zgaruvchilarsiz kod yozishda

⚠️ Eslatma
for ... else kamdan-kam ishlatiladi, chunki ko‘p dasturchilar uni “sikl muvaffaqiyatsiz tugaganda else ishlaydi” deb noto‘g‘ri talqin qiladi.
Ammo to‘g‘ri joyda ishlatilsa — kodni yanada deklarativ va toza qiladi.

Qisqa xulosa:
for-else = “Agar break bo‘lmasa, elseni bajar.”

🔍 Elegant qidiruv mantiqi uchun Pythonic yechim.
32❤‍🔥1🔥1👏1😁1👌1
🎙 Pythonda ovozli dasturlar yaratish — pyttsx3 bilan!

Agar siz foydalanuvchiga matnni ovozga o‘qib beruvchi dastur yaratmoqchi bo‘lsangiz, pyttsx3 kutubxonasi aynan siz uchun 🔥

🧠 pyttsx3 nima?
pyttsx3 — bu Pythonda ishlovchi offline text-to-speech (TTS) kutubxona. Ya’ni, u internetga ulanmasdan turib ham matnni ovozga aylantira oladi!

⚙️ O‘rnatish:
pip install pyttsx3


🧩 Oddiy foydalanish namunasi:
import pyttsx3

engine = pyttsx3.init()
engine.say("Salom! Bugun siz bilan Python o‘rganamiz.")
engine.runAndWait()


💡 Qo‘shimcha imkoniyatlar:
• Ovoz tezligini o‘zgartirish
• Erkak yoki ayol ovozini tanlash
• Ovoz balandligini sozlash

Masalan:
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id) # 0 - erkak, 1 - ayol
engine.setProperty('rate', 150) # tezlik
engine.setProperty('volume', 0.9) # balandlik


🗣 Natijada sizning dasturingiz matnni jonli ovoz bilan o‘qib beradi!
Bu imkoniyatdan:
• Ovozli yordamchi yaratishda
• O‘quv dasturlarda
• Nogironlar uchun qulay interfeys yaratishda foydalanish mumkin.
🔥32👍1
pyttsx3 si ieltsga tayyorlanayotgan yoki ingliz tili o'rganayotganlarga juda foydali ekan.

To'g'ri u o'zbekchani uncha o'qiy olmaydi, lekin ingliz tilini yaxshi o'qiydi va .mp3 faylga yozib beradi. Siz esa bu mp3 faylni telefonda eshitib yurishingiz mumkin.

import pyttsx3

# Init TTS engine
engine = pyttsx3.init()
engine.setProperty('rate', 150) # speaking speed
engine.setProperty('volume', 1) # volume 0-1

phrases = [
"Turn left. Turn left at the corner.",
"Turn right. Turn right after the traffic lights.",
"Go straight. Go straight along this road.",
"Follow the road. Follow the road until you reach the park.",
"Cross the street. Cross the street at the zebra crossing.",
"Next to. The library is next to the post office.",
"Opposite. The bank is opposite the park.",
"Between. The school is between the supermarket and the cafe.",
"Near. There is a bus stop near the station.",
"Adjacent to. The new building is adjacent to the river.",
"Has been built. A new shopping mall has been built.",
"Has been removed. The old bridge has been removed.",
"Has been extended. The park has been extended.",
"Has been converted. The factory has been converted into apartments.",
"Has been relocated. The bus stop has been relocated."
]

# Combine phrases into one string
text = " ".join(phrases)

# Save to MP3
engine.save_to_file(text, 'IELTS_map_phrases.mp3')
engine.runAndWait()
🔥211❤‍🔥1👍1
🚀 #Python: List Comprehension — qisqa, tez va samarali kod yozish usuli

Ko‘p hollarda ro‘yxat (list) yaratish uchun for siklidan foydalanamiz.
Lekin Pythonda buni bitta qatorda yozish mumkin 😎
numbers = [i * 2 for i in range(5) if i > 0]
print(numbers)


🧩 Bu kodda nima bo‘layapti?

1️⃣ for i in range(5) → i qiymatlari: 0, 1, 2, 3, 4
2️⃣ if i > 0 → faqat 1, 2, 3, 4 olinadi
3️⃣ i * 2 → har bir son 2 ga ko‘paytiriladi

Natija: [2, 4, 6, 8]


⚡️ Nega List Comprehension foydali?

1. Kod qisqaradi
# Oddiy usul
nums = []
for i in range(5):
if i > 0:
nums.append(i * 2)

# List comprehension
nums = [i * 2 for i in range(5) if i > 0]


👉 Natija bir xil, lekin kod ancha ixcham va o‘qilishi oson.

2. Ishlash tezligi yuqori
append() chaqiruvlari yo‘q, hammasi Pythonning ichki C darajasidagi optimallashtirilgan loopda bajariladi.

Masalan:
import time

# Oddiy for
start = time.time()
nums = []
for i in range(10_000_000):
nums.append(i * 2)
print("Oddiy for:", time.time() - start)

# List comprehension
start = time.time()
nums = [i * 2 for i in range(10_000_000)]
print("List comprehension:", time.time() - start)


💡 Natija odatda 1.5–2 baravar tezroq bo‘ladi!

3. O‘qish oson va tushunarli
even = [x for x in range(10) if x % 2 == 0]
# Juft sonlar ro‘yxati


4. Filtrlash va o‘zgartirishni oson qiladi
words = ["hello", "python", "world"]
lengths = [len(w) for w in words] # [5, 6, 5]


5. Bir necha sikllarni birlashtirish
Hatto bir nechta for ni bitta list comprehension ichida ishlatish ham mumkin:
pairs = [(x, y) for x in [1, 2] for y in ['a', 'b']]
# [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]


💬 Xulosa:
🔹 List comprehension — Pythonning eng qulay sintaksislaridan biri.
🔹 Kodni ixcham qiladi.
🔹 Ishlashni tezlashtiradi.
🔹 O‘qishni osonlashtiradi.
👍62🔥2
🧩 Pythonda Multiple Inheritance — “Ko‘p meros olish” haqida?

OOPda (Obyektga yo‘naltirilgan dasturlashda) multiple inheritance degani —
bitta klass bir vaqtning o‘zida bir nechta ota-klasslardan (parent class) meros olishi mumkin degani.

👨‍🏫 Oddiy misol:
class A:
def feature_a(self):
print("A sinfidagi funksiya")

class B:
def feature_b(self):
print("B sinfidagi funksiya")

class C(A, B): # 👉 A va B dan meros olayapti
def feature_c(self):
print("C sinfidagi funksiya")

obj = C()
obj.feature_a()
obj.feature_b()


📤 Natija:
A sinfidagi funksiya
B sinfidagi funksiya


🧠 Fikr:
Multiple inheritance — bir obyektga bir nechta “rol” yoki “xususiyat” berish imkonini beradi.
Masalan, 🦆 o‘rdak uchadi ham, suzadi ham — demak u Flyable va Swimmable sinflaridan meros oladi.

⚠️ Ehtiyot bo‘ling!!!
Multiple inheritanceda “diamond problem” paydo bo‘lishi mumkin:
ya’ni bir xil nomdagi metod bir nechta ota klassda mavjud bo‘lsa — Python MRO (Method Resolution Order) qoidasi bo‘yicha birinchi topilganini ishlatadi.

Tartibni tekshirish uchun:
print(C.mro())


Xulosa:

• Kodni qayta ishlatish osonlashadi
• MRO metod tartibini hal qiladi
• super() yordamida ota klasslar metodlarini chaqirish mumkin
• Juda qulay, lekin ehtiyotkorlik bilan foydalaning 😉
🔥21👍1
💻 DRY Prinsipi: Kodingizni 50% qisqartiring!

"Don't Repeat Yourself" — Senior dasturchilar bu qoidani tushida ham eslab turadi 😴

Savol: Siz bir xil kodni necha marta copy-paste qilgansiz? 🤔
Agar javobi "Ko'p marta" bo'lsa — bu post aynan siz uchun! 👇
Sodda qilib aytganda: DRY prinsipi bir xil ishni 2 marta qilmaslik g'oyasini ilgari suradi!

DRY bizga nima beradi?

Kod 3 barobar qisqa — kamroq yozasiz
Xatolar 70% kamayadi — kam kod = kam xatolik
Tezlik 5x oshadi — 1 joyda o'zgartirish kifoya
Team ishlash oson — kodni tushunish oson


DRY bo'lmasa nima bo'ladi? (😱 DAHSHAT! Bir xil kod 5 marta!)

kamida 3 barobar ko'p kod
Tushunilishi qiyin
Yangi narsa qo'shish = azob


🎓 DRY PRINSIPINING OLTIN QOIDALARI

1️⃣ 3 Marta Qoidasi (Rule of Three)
Bir xil kod 3 marta takrorlanadimi? Funksiyaga aylantir!

2️⃣ Ma'lumot bir joyda
#  Yomon
price1 = 25000
price2 = 25000
price3 = 25000

# Yaxshi
PRICES = {"osh": 25000}


3️⃣ Funksiya = Qayta ishlatish
# Bir marta yoz, 100 marta ishla! 💪
def hisoblash(narx, chegirma=0):
return narx * (1 - chegirma / 100)


4️⃣ DRY ≠ Har narsani funksiya qilish
Agar kod o'zi faqat bir martagina ishlatilsa, funksiya kerak emas! Balans muhim!

Komentariyada misol keltirilgan 👇
4👍3🔥1👌1
🌀 Callback Hell — Pythonda “do‘zax”ga tushmaslik sirlari 😅

🔍 Callback hell nima?


“Callback hell” — bu kod ichida ko‘p darajadagi ichma-ich callback funksiyalar ishlatilganda paydo bo‘ladigan muammo.
Bunda kod piramida shaklida cho‘zilib ketadi va tushunish, boshqarish, xato topish juda qiyinlashadi.


🚨 Nima oqibatlarga olib keladi?

Callback hell dasturda bir nechta jiddiy muammolarga sabab bo‘ladi:
📖 Kod o‘qilishi va tushunilishi qiyinlashadi
🧩 Xatolarni tutish (try/except) murakkablashadi
🔄 Oqimni kuzatish (qaysi funksiya qachon ishlaydi) chalkashadi
🧪 Test yozish va kodni kengaytirish mushkul bo‘ladi
💥 Kichik o‘zgarish ham butun jarayonni buzib qo‘yishi mumkin


💻 Misol — Callback Hell
def step1(callback):
print("1-qadam bajarildi")
callback()

def step2(callback):
print("2-qadam bajarildi")
callback()

def step3(callback):
print("3-qadam bajarildi")
callback()

# 👇 Callback hell boshlanmoqda...
step1(lambda:
step2(lambda:
step3(lambda:
print("Barcha ishlar tugadi!")
)
)
)


Kod ishlaydi, lekin...
😵 Tushunish qiyin, xatoni topish — yanada qiyin!


Yechim — async va await
Pythonda bu muammoni asinxron dasturlash yordamida hal qilish mumkin:
import asyncio

async def step1():
print("1-qadam bajarildi")

async def step2():
print("2-qadam bajarildi")

async def step3():
print("3-qadam bajarildi")

async def main():
await step1()
await step2()
await step3()
print("Barcha ishlar tugadi!")

asyncio.run(main())


🟢 Natija:
• Kod toza
• O‘qilishi oson
• Xatolarni tutish oson
• Asinxron ishlaydi


💡 Xulosa

Callback hell — kichik loyihada sezilmasligi mumkin,
lekin katta tizimlarda vaqt va asabni yutadigan muammo.
Shuning uchun har doim:
👉 async/await yoki asyncio bilan ishlashni o‘rganing!
👍42🔥1
📡 Python loyihalarda API requestlarni bitta joyda boshqarish — professional yondashuv

Ko‘pchilik dasturchilar har bir endpoint uchun alohida requests.get() yoki requests.post() yozib yuradi. Bu kichik loyihalarda ishlashi mumkin, lekin loyihangiz kattalashganda:

• Token qo‘shish takrorlanadi
• Xatoliklar tarqoq bo‘lib ketadi
• Token refresh chalkashlashadi
• Debug qilish qiyinlashadi

Shuning uchun requestlarni bitta markaziy joyda konfiguratsiya qilish — eng to‘g‘ri yechim.

🔧 Nima qilish kerak?
Buning uchun ApiClient yoki BaseClient deb nomlangan markaziy sinf (client) yaratiladi.
U quyidagi vazifalarni bajaradi:

1. Tokenni avtomatik qo‘shadi
Headerga tokenni har safar qo‘lda yozish shart bo‘lmaydi.

2. Request xatoliklarni bitta joyda tutadi
Masalan:
• 4xx xatolarni
• 5xx server xatolarni
• Timeout yoki ConnectionError xatolarni

Hammasi yagona joyda ishlanadi.

3. Token refreshni avtomatik qiladi
Agar server 401 qaytarsa, client refresh qiladi, tokenni yangilaydi, requestni qayta yuboradi.

4. Response strukturasini standart qiladi
Har joyda response.json() deb parse qilish shart emas.

💡 Bu yondashuv nimani beradi?
• Har bir joyda token yozib yurmaymiz
• Refresh jarayoni avtomatlashtirilgan
• Kod o‘qilishi yaxshilanadi
• Kengaytirish osonlashadi
• Debug qilish tezlashadi
• Bitta joyda o‘zgarish — butun loyiha uchun o‘zgarish demak
• Serverdan qaytadigan ma'lum bir turdagi javoblarga qanday reaksiya qilishni markaziy belgilash mumkin

Bu — katta loyihalarda doim ishlatiladigan professional arxitektura.

Markazlashtirilgan request client kerak bo‘ladigan loyihalar:
• Telegram bot
• FastAPI / Django backend
• Mikroservislar
• Automation / scrap
• Desktop ilovalar
• ML backend integratsiya

Komentariyada oddiy misol keltirilgan👇
👍31🔥1
📦 Python Offline Package: Afzalliklari va Kamchiliklari

Siz loyihani internetsiz kompyuterga o‘rnatishingiz kerakmi? Offline package buning uchun ideal!


Afzalliklari

🌐 Internetga bog‘liq emas – server yoki xavfsiz korporativ muhitda ishlaydi
⚡️ Tez deploy – bir marta yuklab olib, bir necha kompyuterga o‘rnatish mumkin
🔒 Versiya barqarorligi – paketlar aniq versiyada ishlaydi, kutilmagan update yo‘q
🛠 Dependency stability – paketlar orasidagi moslik oldindan tekshiriladi


⚠️ Kamchiliklari

📦 Hajmi katta bo‘lishi mumkin – masalan, tensorflow yoki pandas bilan
💻 Platformaga bog‘liq – Windows, Linux, Mac uchun alohida paketlar kerak
Yangilanishlar avtomatik emas – security patchlar uchun o‘zingiz yangilashingiz kerak
🔧 C/C++ kutubxonalar bilan murakkab – DLL yoki SO fayllar talab qilinadi


🛠 Offline Package qilish?

1️⃣ Paketlarni yuklab olish
pip download -d packages -r requirements.txt


2️⃣ Offline o‘rnatish
pip install --no-index --find-links=packages -r requirements.txt


3️⃣ Platformga mos paketlar tanlang
• Windows x64: cp311-win_amd64.whl
• Linux x86_64: cp311-manylinux_x86_64.whl

4️⃣ Virtual environment bilan birga ishlating
python -m venv venv
venv\Scripts\activate
pip install --no-index --find-links=packages -r requirements.txt


💡 Xulosa:
Offline package – internetga ulanmasdan loyihani tarqatishning eng qulay yo‘li, lekin platforma va dependency-larga e’tibor berish kerak.
👍21🔥1
🐍 Python venv-ni boshqa kompyuterga ko‘chirsangiz nega muammo chiqadi?

Ko‘p dasturchilar loyihani tayyor virtual muhit (venv) bilan boshqa kompyuterga ko‘chirsa bo‘ladi deb o‘ylashadi. Aslida esa, Python venv portativ emas. Shuning uchun ko‘chirganda turli xatolar paydo bo‘ladi.

Keling, eng keng tarqalgan sabablarni ko‘rib chiqamiz 👇

1. Venv absolute (to‘liq) pathlarga bog‘langan
venv/bin/activate, pyvenv.cfg va Scripts/*.exe fayllarida kompyuterning eski manzili yozib qo‘yilgan bo‘ladi.

Misol:
home = D:\projects\old_pc\myproject\venv


Yangi kompyuterda bu yo‘l bo‘lmaganligi sababli:
• pip ishlamaydi
• interpreter topilmaydi
• activate xatoga tushadi

2. OS / Python versiyasi mos kelmaydi
Venv faqat yaratilgan Python versiyasi bilan ishlaydi.

Masalan:
• Eski kompyuter: Python 3.10
• Yangi kompyuter: Python 3.12

→ Venv ishlamaydi, chunki .pyd va .dll fayllar mos kelmaydi.

3. Platformaga bog‘langan paketlar ishlamaydi
Ayniqsa quyidagilar:
• numpy
• pydantic
• pythonnet
• torch
• cryptography
• har qanday .pyd, .dll, .so bilan ishlaydigan paketlar

Ular OSga bog‘langan binary fayllarga ega. Boshqa kompyuterda ular buziladi.

4. DLL, so, pyd fayllar yo‘qligi
Ko‘chirish jarayonida:
• antivirus bloklashi
• zip ochilganda zarar ko‘rishi
• dependency fayllar yo‘qolishi

kabi holatlar ko‘p uchraydi.

5. PATH va environment mos kelmaydi
Har bir kompyuterning:
• PATH
• system DLLlari
• Microsoft C++ Redistributable
• .NET Runtime (agar pythonnet ishlatilsa)
har xil bo‘ladi.

Bu ham venv buzilishiga sabab bo‘ladi.


✔️ Eng to‘g‘ri yechim nima?

1️⃣ Venvni umuman ko‘chirmang
Buning o‘rniga quyidagilarni ko‘chiring:
project/
requirements.txt
your_code.py


Yangi kompyuterda:
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt


Bu eng toza va eng kam xatolik bilan ishlaydigan yo‘l.

2️⃣ Freeze qilingan paketlar ro‘yxatini doim qo‘shing
pip freeze > requirements.txt


3️⃣ Agar butunlay offline bo‘lsangiz (ya'ni yangi komyuterda internet bo'lmasa)
pip download orqali barcha paketlarni oldindan yuklab oling:
pip download -r requirements.txt -d offline_packages/


Yangi kompyuterda:
pip install --no-index --find-links=offline_packages -r requirements.txt


📌 Xulosa
Python venv ko‘chiriladigan format emas.
U OS, Python versiyasi va kompyuter ichki yo‘llariga juda bog‘langan.

Shu sababli, venvni ko‘chirish → xatolarning eng katta manbai.

Eng yaxshi amaliyot:
👉 requirements.txt + yangi venv tiklas
👍42🔥1👏1🏆1
Ingliz tili o'rganayotganlar uchun foydali, so'z yodlashda yordam beradigan dastur kodini joylaymi? Shu postga reaksiyalar soni 30 tadan o'tsa kanalga tashlayman!
👍43🔥19🥰95👨‍💻4👏2🎉2🤩1
code.7z
6.2 KB
Ingliz tilidan so'z yodlashda va hamma yodlayotgan so'zlaringizni mustahkamlash uchun foydali bo'lgan dastur. buni .exe varianti kerak deydiganlar bo'lsa u ham muammo emas.

Foydali bo'lgan bo'lsa yaqinlarga ulashishni unutmang:
https://t.me/python_fastapi_uz
4
Isoqjanov Ilyos | Python
code.7z
Telefonda ishlaydigan apk versiya kerak deganlar nechtamiz? Agar talabgorlar ko'p bo'lsa yana ozroq bo'sh bo'lgan vaqtimda tayyorlab beraman. Yuqoridagi kod kompyuterda python muhit orqali ishlatiladi
🔥20
🎯 #Python OOP — Encapsulation (Inkapsulyatsiya) nima?

Inkapsulyatsiya — bu obyektning ichki ma’lumotlarini tashqaridan bevosita o‘zgartirilishidan himoya qilish usuli. Ya’ni, atribut va metodlarni yashirish va ularga faqat nazorat orqali murojaat qilish.

🔐 Pythonda atributlarni yashirish 3 xil darajada amalga oshiriladi:

1️⃣ Public — ochiq atribut

Barchaga ochiq, erkin foydalanish mumkin.
class User:
def __init__(self):
self.name = "Ali" # public


2️⃣ Protected — ichki foydalanish uchun

Atribut nomi _ (bitta pastki chiziq) bilan boshlanadi.
class User:
def __init__(self):
self._balance = 1000 # protected


3️⃣ Private — to‘liq himoyalangan

Atribut nomi (ikki pastki chiziq) bilan boshlanadi.
class User:
def __init(self):
self.__password = "1234" # private


🧠 Private atributga qanday murojaat qilinadi?

Odatda bevosita murojaat qilib bo‘lmaydi, faqat getter/setter orqali:
class User:
def __init__(self):
self.__password = "1234"

def get_password(self):
return self.__password

def set_password(self, new_pass):
if len(new_pass) >= 4:
self.__password = new_pass
else:
print("Parol kamida 4 belgidan iborat bo‘lishi kerak!")


📌 Encapsulation nima beradi?


✔️ Ma’lumotlarni himoya qiladi
✔️ Xatolarni kamaytiradi
✔️ Katta loyihalarda tartib-intizom yaratadi
✔️ Tashqi kodning ichki tuzilmani buzishini oldini oladi


Bu tushunchani yaxshi tushunmaganlar anchagina manimcha, savolaringlar bo'lsa komentariyada qoldirishinglar mumkin? Savollar to'plansa ularning hammasiga bittada javob beraman, yoki komentarida yoki video orqali👇
51👍1🥰1👏1
⚙️ Funksiya nima?

🐍 Python (va boshqa dasturlash tillarida) funksiya — bu kodni qayta-qayta yozmasdan, uni bitta blokka joylashtirib, kerak bo‘lganda chaqirish imkonini beradigan vosita.

🔑 Oddiy qilib aytganda:
Funksiya – bu ma’lum bir vazifani bajaradigan kod bo‘lagi. Biror ishni bir necha marta qayta qayta bajargandan ko'ra shu ishni funksiya qilib qo'yish ancha foydali. Shunda kodimiz tushunarliroq, o'zgartirish oson va hajmi kichikroq bo'ladi.

📝 Misol – funksiya ishlatmasdan:
# Uch marta salom yozamiz
print("Salom, Ali! Tizimga xush kelibsiz!")
print("Salom, Ali! Tizimga xush kelibsiz!")
print("Salom, Ali! Tizimga xush kelibsiz!")


📝 Funksiya bilan:
def salom_ber(ism):
print(f"Salom, {ism}! Tizimga xush kelibsiz!")

# Endi kerak bo‘lganda chaqiramiz
salom_ber("Ali")
salom_ber("Vali")
salom_ber("Gulnoza")


Natija:
Salom, Ali! Tizimga xush kelibsiz!
Salom, Vali! Tizimga xush kelibsiz!
Salom, Gulnoza! Tizimga xush kelibsiz!


🔎 Nega funksiya kerak?

• Kodni tartibli qiladi
Qayta ishlatish oson (bir marta yozasiz, ko‘p marta ishlatasiz)
Xatolarni tezroq topish imkonini beradi
• Kodni boshqalarga tushunarli qiladi
• O'zgartirish osonroq
• Kodning hajmi kamroq
• Bu funksiyani boshqa loyihalaringizda ishlatish oson bo'ladi

📌 Xulosa:
Funksiya — bu dasturiy kodning “kichik yordamchisi”. Har bir yordamchi alohida ishni bajaradi va dasturni ancha qulay qiladi.
7🔥32👍1🥰1👏1
image_2025-11-22_10-21-47.png
152.8 KB
Pythonni o'rganish uchun roadmap (ya'ni o'rganish kerak bo'lgan narsalar va ularning ketma-ketligi). Shularning hammasini bilsangiz men senior dasturchiman deyverasiz😁
🔥93👍2👏1
🧠 Pythonda Comprehension nima? Nega ishlatiladi?

Python dasturlashda comprehension — ma’lumot tuzilmalarini ixcham, tez va o‘qilishi oson tarzda yaratish usuli. U an’anaviy for sikliga qaraganda kamroq kod, ko‘proq qulaylik va yaxshi performance beradi.

Comprehensionning 4 ta asosiy turi mavjud:

🔵 1) List Comprehension
Ro‘yxat yaratishning eng mashhur usuli.
➤ Misol:
numbers = [1, 2, 3, 4]
squares = [n*n for n in numbers]

❗️ Shart bilan yozish ham mumkin:
even = [n for n in numbers if n % 2 == 0]


🟢 2) Dictionary Comprehension
Lug‘atlarni tez yaratish uchun ishlatiladi.
➤ Misol:
kvadratlar = {n: n*n for n in range(1, 6)}

Filtrlash bilan:
even_map = {n: n*n for n in range(10) if n % 2 == 0}


🟣 3) Set Comprehension
To‘plam (set) yaratish uchun.
➤ Misol:
letters = {ch for ch in "hello python"}

🟡 4) Generator Expression (Generator Comprehension)
Xotirani juda tejamkor ishlatadi — barcha qiymatlar birdaniga emas, kerak bo‘lganda yaratiladi.
➤ Misol:
gen = (n*n for n in range(10))

Bu ro‘yxat ham tuple ham emas — bu generator (e'tibor bering tuple emas, ko'pchilik tuple deb o'ylaydi)! Xotira kam ishlatiladi.


Comprehension nega kerak? Nima yutamiz?
✔️ 1. Kod 2-3 marta qisqaradi
An’anaviy usul:
result = []
for n in range(10):
result.append(n*n)

Comprehension:
result = [n*n for n in range(10)]


✔️ 2. O‘qish va tushunish oson
Bitta qatorda nima qilinayotgani aniq ko‘rinadi.

✔️ 3. Tezroq ishlaydi (performance yaxshiroq)
Python comprehensionlarni optimallashtiradi.

✔️ 4. Xatolar kamroq bo‘ladi

append, set.add, dict[key] = value kabi funksiyalar kerak bo‘lmaydi.

❗️ Agar comprehension ishlatilmasa, nima yutqaziladi?
− Kod cho‘zilib ketadi
− Ko‘rinishi chalkash bo‘ladi
− Ba’zi hollarda sekinroq ishlaydi
− Pythonning “pythonic” uslubidan yiroqlashadi

Comprehension — bu Pythonda sodda, toza va tez kod yozishning eng muhim vositalaridan biri.
6👍2🔥21
🔵 Python: @property — faqat private yoki protected atributlar uchun emas!

Ko‘pchilikda shunday tushuncha bor:
@property faqat private yoki protected atributlar bilan ishlatiladi.”
Bu — noto‘g‘ri.

Keling, to‘g‘risini tushunamiz👇

🔹 @property aslida nima uchun kerak?
@property ning vazifasi:
• atributni o‘qishda nazorat qilish (getter)
• atributga qiymat berishda nazorat qilish (setter)
• ichki kodni tashqi interfeysdan ajratish (encapsulation)
• API ni chiroyli va pythonic qilish (obj.get_price() o‘rniga obj.price)

Demak, @property — atributni boshqariladigan metodga aylantirish vositasi.
Uning private/protected bilan to‘g‘ridan-to‘g‘ri bog'liq joyi yo‘q.

🔵 Unda nega hamma @property ni private atribut bilan ishlatadi?
Buning muhim texnik sababi bor:
@property
def radius(self):
return self.radius # cheksiz rekursiya

Atribut va metod nomi bir xil bo'lib qolishi sababli cheksiz rekursiya yuzaga keladi, buni rekursiyani oldini olish uchun ularni nomini ikki xil qilinishi mumkin ya'ni radius atributi protected yoki private ko'rinishida olinishi mumkin:
_radius (protected)
__radius (private)

Bu shunchaki rekursiyani oldini olish usuli.
Hech qanday majburiy qoida emas.

🟢 Property private bo‘lmasdan ham ishlaydi
Masalan, hisob-kitobli atribut:
@property
def area(self):
return self.width * self.height

Bu yerda private atribut umuman yo‘q, lekin property juda chiroyli ishlayapti.

🟣 Yoki faqat o‘qiladigan atribut:
@property
def info(self):
return "User info"

Bu ham private atribut bo'lishini talab qilmaydi.


🟡 Xulosa (eng muhim)

@property — bu private atributlar uchun yaratilgan mexanizm emas.
Uning vazifasi: atributga o‘xshash interfeys orqali boshqariladigan metod yaratish.

Private/protected atributlar esa shunchaki:
ichki qiymatni ajratish
rekursiyani oldini olish
inkapsulyatsiyani yaxshilash
uchun odatiy amaliyot xolos.


🟥 Qachon ishlatmaslik kerak?
Juda katta va og‘ir hisob-kitob property ichida bo‘lsa
Noaniq side effect bo‘lsa
Atribut nomi orqali metod chaqirilayotganini yashirish zarar bo‘lsa

Bunday hollarda odatiy metod ishlatgan ma’qul.
👍2🔥1👏1
🔥 Obyekt class atributini o‘zgartirsa nima bo‘ladi?

👉 Ko‘pchilik o‘ylagandek, obyekt orqali class atributiga qiymat bersangiz, class atributi o‘zgarmaydi.
Aksincha, Python obyektga yangi atribut yaratadi. Ya'ni bu nomdagi atribut endi ham class da ham obyektda bor bo'ladi va ular boshqa boshqa.

📌 Nega shunday?
Pythonda agar obyektdan biror atribut qiymatini olmoqchi bo'lsak, atributni qidirish tartibi quyidagicha bo'ladi:
1️⃣ Avval obyekt ichida (self.dict) qidiradi (topsa shu qiymatni qaytaradi va qidiruv to'xtaydi)
2️⃣ Topilmasa — class ichidan (Class.dict) ushbu atributni qidiradi va qaytaradi

Misol:
class A:
x = 10 # sinf atributi

a1 = A()
a2 = A()

a1.x = 99 # obyekt orqali qiymat berildi

print(a1.x) # 99 → obyekt atributi
print(a2.x) # 10 → sinf atributi o'zgarmadi
print(A.x) # 10 → sinf atributi o'zgarmadi

Yuqoridagi kodda a1.x = 99 orqali xuddiki biz class atributi x ni o'zgartiryapmiz, lekin aslida unday emas. Bu holda obyekt o'ziga yangi x atribut yaratadi va shu yangi atributga 99 qiymatini beradi, Class atributi x esa o'zgarishsiz qoladi.

🧐 Xulosa:
Class atributini obyekt orqali obyekt atributini o'zgartirganday o'zgartirib bo'lmaydi, chunki u klassga tegishli narsa. Uni faqat class ni o'zi orqali yoki obyekt tomonidan @classmethod yordamida o'zgartirilishi mumkin xalos. Lekin shuni inobatga olish kerak agar obyekt class ga tegishli atributni @classmethod yordamida yaratilgan metod orqali o'zgartirsa bu o'zgarish ushbu class dan yaratilgan hamma obyektlarga ta'sirini o'tkazadi.
2👍2🔥1👏1
🐍 Python: @classmethod nimaga kerak?

Pythonda obyektlar va classlar qanday ishlashini tushunish — toza va mantiqli kod yozishning asosiy qismidir. Bugun @classmethod haqida sodda qilib tushuntiramiz.

🔹 Obyekt atributi vs Class atributi
• Obyekt atributi — har bir yaratilgan obyektga tegishli (self).
• Class atributi — butun classga tegishli, barcha obyektlar ishlatadi (cls).

Demak class ham obyekt ham o'zining attributiga ega ekan, nega endi ularni o'zining metodlariga ega bo'lolmas ekan, albatta uning ham imkoni bor. Agar biz odatdagi metod yaratsak u metod obyektga tegishli bo'ladi va obyekt yaratilgandan keyin ishlaydi, @classmethod orqali metod yaratsak esa, bu metod class ga tegishli bo'ladi va uni obyekt yaratilmasdan oldin ham ishlata olamiz.

Yana yuqoridagi postda aytdikki, class atributini obyekt metodi yoki attributi orqali o'zgartirishni imkoni yo'q, agar o'zgartiramiz desak obyekt o'zgartirish o'zrniga o'zida shunaqa attribut yaratib oladi. Lekin biz class attributini @classmethod orqali hosil qilingan metod orqali o'zgartirishimiz mumkin, chunki bu metod class ga tegishli.

🔹 @classmethod nima qiladi?
@classmethod — classga tegishli metod.
U obyektga emas, classning o‘ziga ishlaydi, shuning uchun u birinchi argument sifatida: cls qabul qiladi.
Obyekt orqali chaqirilsa ham, baribir class bilan ishlaydi, obyekt bilan emas.

🔍 Misol:
class Counter:
count = 0 # sinf atributi

def __init__(self):
Counter.count += 1

@classmethod
def get_count(cls):
return cls.count

• count → class atributi
• get_count() → class metodi
• obyektlar → class atributidan foydalana oladi
• obyektlar → class metodidan ham foydalana oladi
(lekin metod baribir cls bilan ishlaydi)

📌 Qisqa xulosa
• Obyekt → class atributidan foydalana oladi.
• Xuddi shunday obyekt → class metodidan (@classmethod) ham foydalana oladi.
• Lekin @classmethod obyektga emas, classga tegishli.
👍2🔥1👀1