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 darsi: insort() — tartibni buzmasdan qo‘shish!

Ko‘p hollarda bizda tartiblangan ro‘yxat bo‘ladi, va biz unga yangi element qo‘shmoqchimiz.
Ammo append() yoki insert() dan foydalansak — tartib buziladi, keyin yana sort() qilishga to‘g‘ri keladi 😩

Shunda yordamga bisect.insort() keladi 🚀

🧩 Misol:
from bisect import insort

numbers = [1, 3, 5, 7]
insort(numbers, 4)
print(numbers)


🟢 Natija:
[1, 3, 4, 5, 7]


➡️ insort() — yangi elementni ro‘yxat ichidagi to‘g‘ri joyiga joylashtiradi.
Ya’ni ro‘yxat tartiblangan holatda qoladi, sort() chaqirish shart emas

📚 Qisqacha tushuncha:
insort(list, element) — elementni joylashtiradi (ro‘yxat tartibini saqlaydi)
bisect_left() va bisect_right() esa qaysi joyga joylashtirish kerakligini topadi.

⚙️ Yana bir misol:
from bisect import bisect_left, insort

nums = [1, 2, 4, 5]
pos = bisect_left(nums, 3)
print(pos) # 2

insort(nums, 3)
print(nums) # [1, 2, 3, 4, 5]


💡 Afzalligi:
• Har safar sort() chaqirishga hojat yo‘q
• insort — O(n) vaqt oladi, sort() esa O(n log n)
• Kichik, lekin samarali optimizatsiya 🔥

#️⃣ Xulosa:
• insort() — bu ro‘yxatni qayta sort qilmasdan, yangi elementni tartibga mos joyga qo‘shishning eng toza yo‘li 🧠

🧵 Modul: bisect
🔍 Funktsiya: insort(list, value)
⚡️ Ishlatish: from bisect import insort
🔥43👍1🎉1
📘 #Python | Walrus operatori (:=)

Python 3.8 versiyasidan boshlab yangi operator — walrus operatori (:=) paydo bo‘lgan.
U orqali biz biror o‘zgaruvchiga qiymat berish va shu qiymatdan darhol foydalanish imkoniga egamiz 😎

🔹 Oddiy holat
x = int(input("Son kiriting: "))
natija = x + x**2
print(natija)

Bu yerda avval x ga qiymat beramiz, keyin undan alohida foydalanamiz.

🔹 Walrus operatori bilan
natija = (x := int(input("Son kiriting: "))) + x**2
print(natija)


Bu ifoda bir qatorning o‘zida:
1. int(input()) orqali foydalanuvchi kiritgan sonni oladi,
2. shu qiymatni x ga yozadi,
3. va shu qiymatdan yana ifoda ichida foydalanadi (x**2 qismida).

🔍 Misol: agar foydalanuvchi 5 kiritsa,
(x := 5) → x = 5 bo‘ladi,
so‘ng 5 + 5**2 = 30 chiqadi.


🔹 Yana bir misol (ko‘p ishlatiladigan holat)
# 0 kiritilgunga qadar sonlarni yig‘ish
total = 0
while (x := int(input("Son kiriting (0 - stop): "))) != 0:
total += x

print("Yig‘indi:", total)


Bu yerda (x := int(input())) qiymatni oladi, x ga yozadi va while shartida ham foydalanadi — bitta qatorda! 🔁

⚠️ Eslatma:
• Walrus operatori faqat Python 3.8+ versiyalarida ishlaydi.
• Juda foydali, lekin haddan ortiq ishlatish kodingizni o‘qish qiyinlashtirishi mumkin — balansni saqlang 😉

Xulosa:
1. := — qiymatni o‘zgaruvchiga yozish va uni darhol ishlatish imkonini beradi
2. Kodni ixcham, chiroyli va “pythonic” qiladi
3. Ayniqsa while sikllari, shartlar va bitta ifoda ichida hisoblashlarda juda qulay
🔥31👏1😁1
📘 #Python | (A, B)[shart] — noodatiy ifoda

Ba’zan kodingizda shartga qarab 2 xil qiymatdan birini tanlash kerak bo‘ladi.
Masalan:
x = 12
natija = "katta" if x > 10 else "kichik"
print(natija)

Natija: katta

🔹 Lekin buni “hiyla” orqali ham yozish mumkin 😎
x = 12
natija = ("kichik", "katta")[x > 10]
print(natija)


💡 Bu yerda:
• ("kichik", "katta") — tuple
• [x > 10] esa indeks sifatida ishlatiladi (True → 1, False → 0)

Demak:
• agar x > 10 → True → [1] → "katta"
• agar x > 10 → False → [0] → "kichik"

🔍 Yana bir misol:
son = int(input("Son kiriting: "))
natija = ("juft", "toq")[son % 2]
print(natija)

➡️ Foydalanuvchi 7 kiritsa → son % 2 = 1 → "toq"
➡️ Agar 8 kiritsa → son % 2 = 0 → "juft"

⚠️ Lekin ehtiyot bo‘ling:
Garchi (A, B)[shart] ishlasa ham, bu tavsiya etilmaydi

Sabablari:
• Har doim ikkala elementni ham (ya'ni tuple ichidagi element yoki ifodani) hisoblaydi — if else esa faqat keraklisini.
• Kodingizni o‘qish qiyinlashadi.
• Katta loyihalarda bu ifoda chalkashlik keltirib chiqaradi.

To‘g‘ri, toza usul:
natija = "katta" if x > 10 else "kichik"

Bu ancha o‘qilishi oson, “pythonic” va xavfsiz.

Xulosa:
• (A, B)[shart] — shartga qarab 0 yoki 1 indeksni tanlaydi
• Lekin bu faqat “hiyla” sifatida yaxshi, amalda — if ... else ... ishlating 💪
6🔥21👍1
🧪 Dasturlashda testlash nima uchun juda muhim?

Testlash — bu dastur to‘g‘ri ishlayotganini tekshirish jarayoni. U kodni ishonchli, barqaror va xatolarsiz qiladi.

🔹 Nima uchun test yozish kerak?
• Xatolarni erta topadi 🐞
• Kodni o‘zgartirishdan qo‘rqmaysiz 💪
• Loyihani boshqalar ham oson tushunadi 📘
• Tizim ishonchli ishlaydi ⚙️

🔹 Test yozish va qo‘lda (manual) testlash farqi
Test yozish (avtomatik):
• Kod bilan yoziladi, tez bajariladi
• Har safar avtomatik ishlaydi
• Kam xato
• CI/CD tizimiga ulanadi

Qo'lda testlash:
• Inson qo‘lda tekshiradi 👩‍💻
• Har safar qayta bajarish kerak
• Inson xatosi bo‘lishi mumkin
• Mustaqil ishlanadi (CI/CD tizimiga ulanmaydi)

🔹 Kichik va katta loyihalarda farqi
• Kichik loyiha: faqat muhim joylarni testlab qo‘yish ham yetadi.
• Katta loyiha: avtomatlashtirilgan testlarsiz iloji yo‘q — hammasi tizimga ulanadi.

⏱️ Vaqt sarfida avtomatik testlashning foydasi
• Boshlanishida test yozish vaqt oladi, lekin keyin bu vaqtni ko‘p marotaba tejaydi.
• Bir marta yozilgan test — har safar dastur o‘zgarganda siz uchun avtomatik tekshiruvchi bo‘ladi.

Xulosa
• Test yozish — bu kodni tekshirish emas, uni ishonch bilan rivojlantirish uchun asosdir.
• Manual testlash — ko‘rish, his qilish uchun kerak;
• Avtomatik testlar esa — ishonchli ishlash kafolati.

Shunday ekan avtomatik test yozishni o'rganib qo'yavering, axir siz katta-katta loyihalar qilishingiz kerak😄
6👍2👏2🔥1🤔1
🐍 Pythonda Dekorator nima?

Dekorator — bu funksiya bo‘lib, u boshqa funksiyani argument sifatida qabul qiladi va yangi (o‘ralgan) funksiyani qaytaradi. 🎁

Oddiy qilib aytganda — funksiyani bezovchi funksiya 😊

🔹 Misol:
def dekorator(func):
def orovchi():
print("Oldin")
func()
print("Keyin")
return orovchi

@dekorator
def salom():
print("Salom, dunyo!")

salom()


📤 Natija:
Oldin
Salom, dunyo!
Keyin


💡 Dekoratorlardan foydalanish joylari:
🔍 Loglash (funksiya chaqirilganini yozib borish)
⏱️ Vaqt o‘lchash
🔐 Avtorizatsiya tekshiruvi
🧩 Kesh (cache) mexanizmi
🧰 Kod takrorlanishini kamaytirish

🧠 Xulosa:
Dekorator — “funksiyani qabul qilib, funksiya qaytaruvchi funksiya”.
Kodga qo‘shimcha imkoniyat qo‘shish uchun ishlatiladi 🔧

Batafsil ma'lumotni komentariya topishingiz mumkin👇
6👏5👍2🔥1👌1🤓1
📘 #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