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
🧠 remove vs delete — Farqi nimada?
Dasturlashda bu ikki so‘z o‘xshash ko‘rinsa ham, ular bir xil emas. Farqlarni real misollar bilan tushuntiramiz 👇

🔴 delete — butunlay yo‘q qilish
Bu operatsiya ma’lumotni butunlay o‘chiradi. Odatda bu:

- Ma’lumotlar bazasidan o‘chirish
- Faylni diskdan o‘chirish
- Resursni REST API orqali yo‘q qilish

📌 Misol:

DELETE /users/123


Bu foydalanuvchi endi mavjud bo‘lmaydi

🟡 remove — kontekstdan chiqarish
Bu esa, bog‘liqlikni uzish yoki ro‘yxatdan olib tashlash degani. Obyekt o‘zi qoladi, faqat u boshqa joydan chiqariladi.

📌 Misol:

POST /teams/3/remove-user/123


Foydalanuvchi guruhdan chiqariladi, lekin u tizimda qoladi

📌 Taqqoslash:
delete - Ma’lumotni to‘liq yo‘q qiladi, Obyekt yo‘qoladi
remove - Ma’lumotni aloqasidan ajratadi / chiqaradi, Obyekt qoladi

🔚 Xulosa:

delete — radikal o‘chirish
remove — kontekstdan chiqarish

🧑‍💻 Kod yozayotganda bu farqni hisobga olish — toza dizayn va xavfsiz tizim garovi.

#python
https://t.me/simplypythonuz
👍1
🔄 Through model relationship — bu nima?

Djangoda ManyToManyField yordamida ko‘pga-ko‘p aloqalar yaratiladi.
Odatda Django oraliq jadvalni o‘zi avtomatik yaratadi. Lekin ba’zida siz
bu oraliq jadvalga qo‘shimcha ustunlar (sana, baho va h.k.) qo‘shmoqchi
bo‘lasiz
— aynan shunday vaziyatda through modeli kerak bo‘ladi.

Oddiy ManyToMany aloqasi (avtomatik jadval)


class Student(models.Model):
name = models.CharField(max_length=100)

class Course(models.Model):
title = models.CharField(max_length=100)
students = models.ManyToManyField(Student)

🛠 Django bu yerda oraliq jadvalni o‘zi yaratadi. Siz bu jadvalga bevosita
qo‘shimcha ustunlar qo‘sha olmaysiz.

Through model bilan oraliq jadval yaratish


class Student(models.Model):
name = models.CharField(max_length=100)

class Course(models.Model):
title = models.CharField(max_length=100)
students = models.ManyToManyField('Student', through='Enrollment')

class Enrollment(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
enrolled_on = models.DateField()
grade = models.CharField(max_length=2)

📌 Bu yerda Enrollment — oraliq model bo‘lib, u orqali qo‘shimcha ma’lumot
saqlay olamiz (masalan, qachon yozilgan, qanday baho olgan).

📌 Nega through modeli kerak?

🔹 Qo‘shimcha ma’lumot saqlash -> Kursga yozilgan sana, baho, holat
kabi ustunlar qo‘shish mumkin
🔹 To‘liq nazorat -> Validatsiya, signal, metodlar qo‘shish imkoniyati
🔹 Kengroq ishlov -> To‘g‘ridan-to‘g‘ri oraliq model bilan ishlash (filter, update, h.k.)

🧠 Xulosa

Agar oddiy bog‘lanish yetarli bo‘lsa — through kerak emas.
Agar bog‘lanishda qo‘shimcha ma’lumot saqlash kerak bo‘lsa — through
modeli shart.

✍️ Tushunmagan joyingiz haqida kommentariyada yozib qoldiring, unga
qarab qo'shimcha post joylanadi! 😉

#Django #Python #WebDasturlash #ORM #ManyToMany #ThroughModel
https://t.me/simplypythonuz
👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Har doim ham kuch kerak bo'lmaydi, aqlni ham sal ishlataylik degan video!🫡
🆔 UUID nima va nima uchun kerak?

uuid — bu Pythonda mavjud bo‘lgan standart modul bo‘lib, globallikda noyob identifikator (UUID) yaratishning tez va oson usulidir.

Bu usul orqali biz tasodifiy 128-bitli raqam hosil qilamiz — u deyarli 100% holatda noyob bo‘ladi.

Tasavvur qiling, mavjud bo‘lgan UUID lar soni 2¹²² dan oshadi! Bu esa 5 undetsilliondan (ya’ni 5,000,000,000,000,000,000,000,000,000,000,000,000) ortiq variant degani!

🔁 Hatto trillionta UUID mavjud bo‘lsa ham, ular orasida dublikat (bir xil) chiqish ehtimoli milliarddan birdan ham kichik.

⚡️ Bu natija atigi ikki qator kod bilan amalga oshadi! 👇


import uuid
print(uuid.uuid4())



🚀 UUID bilan xavfsiz va noyob identifikatorlarni yarating!!!
🔥2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Pythonda bir qator kodda yoziladigan ishni 15 qator kod yozish orqali qiladigan C++ yoki Javachi tanishlarga yuborib qo'yamiz!😜
😁1
📍 textwrap → shorten()

shorten() funksiyasi sizning matningizni berilgan uzunlikka sig‘dira oladi va avtomatik ravishda ortiqcha qismini kesib tashlaydi.

🔸 Matn qisqa bo‘lsa – o‘zgartirmaydi
🔸 Matn uzun bo‘lsa – so‘zlar oxiridan olib tashlanadi
🔸 Oxiriga default [...] yoki ... (biz belgilagan) belgisi qo‘shiladi

📂 Misollar:

from textwrap import shorten

# Qisqartirish shart emas
shorten("Salom dunyo!", width=20)
# ➤ "Salom dunyo!"

# Qisqartirilgan, default placeholder bilan
shorten("Uzoq matnlar uchun qisqartirish kerak", width=30)
# ➤ "Uzoq matnlar uchun [...]"

# Maxsus placeholder bilan qisqartirilgan
shorten("Juda uzun jumla bo‘lsa, qisqartiramiz", width=35, placeholder="...")
# ➤ "Juda uzun jumla bo‘lsa,..."


🧠 Tarixdagi eng elegant matn qisqartirish usuli — textwrap.shorten() bilan tanishing!
👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Biz mumkin emas deb o'ylagan narsalarga oddiy ko'z bilan nigoh!🙄
Nimadir payqadingiz, chamamda!
📌 Python String (matn) metodlari: To‘liq qo‘llanma 🔠

Pythonda matn (string) bilan ishlash juda qulay va kuchli metodlar to‘plami mavjud. Quyida eng ko‘p ishlatiladigan metodlar va ularning ishlash misollari keltirilgan 👇

🔹 upper() — matndagi barcha harflarni KATTA harfga aylantiradi


text = "salom"
print(text.upper()) # 'SALOM'


🔹 lower() — matndagi barcha harflarni kichik harfga aylantiradi


text = "SALOM"
print(text.lower()) # 'salom'


🔹 capitalize() — faqat birinchi harfni katta harfga aylantiradi


text = "python dasturlash"
print(text.capitalize()) # 'Python dasturlash'


🔹 title() — har bir so‘zning bosh harfini katta qiladi


text = "python dasturlash tili"
print(text.title()) # 'Python Dasturlash Tili'


🔹 strip() — matn boshidagi va oxiridagi bo‘sh joylarni olib tashlaydi


text = " salom "
print(text.strip()) # 'salom'


🔹 replace(old, new) — matndagi old qismini new ga almashtiradi


text = "python yaxshi"
print(text.replace("yaxshi", "zo‘r")) # 'python zo‘r'


🔹 split(sep) — matnni ajratib, ro‘yxatga (list) aylantiradi


text = "olma,banan,anor"
print(text.split(",")) # ['olma', 'banan', 'anor']


🔹 join(list) — ro‘yxatdagi elementlarni bitta stringga qo‘shadi


fruits = ['olma', 'banan', 'anor']
print(", ".join(fruits)) # 'olma, banan, anor'


🔹 find(sub) — substringning indeksini qaytaradi (topilmasa -1)


text = "hello world"
print(text.find("world")) # 6


🔹 startswith(sub) / endswith(sub) — matn berilgan qism bilan boshlanadimi/tugaydimi tekshiradi


print("hello".startswith("he")) # True
print("hello".endswith("lo")) # True


🔹 isalpha() / isdigit() / isalnum() — faqat harfmi, raqammi yoki harf+raqammi tekshiradi


print("python".isalpha()) # True
print("123".isdigit()) # True
print("abc123".isalnum()) # True


🔹 zfill(width) — matnni width uzunlikka yetkazish uchun boshiga 0 qo‘shadi


print("42".zfill(5)) # '00042'


Ushbu metodlar matnlar bilan ishlashni oson va samarali qiladi. Dasturlash jarayonida juda foydali!

🧑‍💻 Siz yana qaysi metod yoki mavzuni o‘rganmoqchisiz? Izohda yozing!
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Junior dasturchi vs Senior dasturchi!! Farq faqat shundamas😂
📌 Python: int (butun son) tipidagi o'zgaruvchilar haqida

🔢 int — bu Pythondagi butun sonli o'zgaruvchi turi. Keling, u bilan bog'liq foydali metod va funksiyalarni ko‘rib chiqamiz.

🔹 1. .bit_length()
Sonni yozish uchun kerak bo‘lgan bitlar sonini qaytaradi.


x = 37
print(x.bit_length()) # ➝ 6


🔹 2. .to_bytes(length, byteorder)
Sonni baytlarga o‘giradi.


x = 1024
b = x.to_bytes(2, byteorder='big')
print(b) # ➝ b'\x04\x00'


🔹 3. int.from_bytes(bytes, byteorder)
Baytdan son hosil qiladi.


b = b'\x04\x00'
x = int.from_bytes(b, byteorder='big')
print(x) # ➝ 1024


🔹 4. Dunder metodlar (__add__, __sub__, ...)
Arifmetik amallar uchun ichki metodlar:


x = 10
print(x.__add__(5)) # ➝ 15


🔹 5. int() funksiyasi
Turli turlardan butun songa o‘tkazish:


print(int("123")) # ➝ 123
print(int(12.8)) # ➝ 12
print(int(True)) # ➝ 1


🔹 6. math modulidagi funksiyalar
int bilan ishlaganda foydali bo‘ladigan funksiyalar:


import math

print(math.factorial(5)) # ➝ 120
print(math.gcd(24, 36)) # ➝ 12


Bonus:
Agar int tipidagi barcha metodlarni ko‘rmoqchi bo‘lsangiz:


print(dir(int))


💡 int — oddiy ko‘ringan bo‘lsa ham, kuchli imkoniyatlarga ega! Kodlaringizda undan to‘g‘ri foydalaning 😉
This media is not supported in your browser
VIEW IN TELEGRAM
Yozgan dasturi ishlamaganda, dasturchilarning muammoga yechim topish jarayoni! (hazil)😎
📊 Python: multimode() funksiyasi haqida batafsil

multimode() — bu statistics moduliga tegishli funksiya bo‘lib, berilgan ma'lumotlar ichida eng ko‘p uchraydigan element(lar) ro‘yxatini qaytaradi.

🔍 multimode() funksiyasi nima qiladi?

- multimode(data) funksiyasi data ichidagi eng ko‘p takrorlangan qiymat(moda)larni aniqlaydi.
- U bir nechta qiymatni qaytarishi mumkin — agar ularning takrorlanish soni bir xil bo‘lsa.
- Agar data bo‘sh bo‘lsa, u holda bo‘sh ro‘yxat ([]) qaytariladi.

📥 Argument:
data — bu istalgan iterable (masalan, list, tuple, str, set, h.k.)

📤 Natija:
Eng ko‘p uchragan qiymat(lar) ro‘yxati (list shaklida)

Foydalanish misollari:


from statistics import multimode

# Misol 1: bir nechta moda bor
print(multimode([1, 2, 2, 3, 3]))
# ➝ [2, 3] (ikkalasi ham 2 marta uchragan)

# Misol 2: faqat bitta moda bor
print(multimode([4, 4, 4, 5, 6]))
# ➝ [4]

# Misol 3: bo'sh ro'yxat
print(multimode([]))
# ➝ []


📌 Foydali eslatmalar:

- multimode() qiymatlarni aniqlangan tartibda qaytaradi — ya’ni data ichida qanday ketma-ketlikda bo‘lsa, shunday tartibda chiqadi.
- Bu funksiya mode() funksiyasidan farqli o‘laroq bir nechta modani qaytarishi mumkin, mode() esa faqat bitta moda beradi va ko‘p moda bo‘lsa xatolik chiqaradi.

🎯 Qayerda foydali?

- Ma’lumotlar tahlilida eng ko‘p uchraydigan qiymatlarni aniqlashda
- O‘quvchilar baholarini, so‘rovnoma natijalarini tahlil qilishda
- Statistika asosida qarorlar chiqarishda

💡 Misol hayotdan:
Agar sizda baholar ro‘yxati bo‘lsa:


grades = [5, 4, 5, 3, 4, 4, 5]
print(multimode(grades)) # ➝ [4, 5]


Demak, 4 va 5 eng ko‘p uchrayotgan baholar ekan.

🧠 Esda tuting:
multimode() — bu oddiy, lekin kuchli vosita. U sizga bir necha moda borligini aniqlash imkonini beradi — bu esa real statistik tahlilda juda muhim.
🔥1
🌐 Python: webbrowser moduli orqali veb-sahifa ochish

Agar siz Python dasturingizdan avtomatik tarzda brauzerda sayt ochmoqchi bo‘lsangiz — webbrowser moduli aynan siz uchun!

🔧 Asosiy funksiyasi:


import webbrowser

webbrowser.open("https://www.google.com")


Yuqoridagi kod — sizning standart brauzeringizda Google saytini ochadi.

📌 Foydali qo‘shimcha funksiyalar:

1. webbrowser.open_new(url)
Yangi brauzer oynasida sahifani ochadi.


webbrowser.open_new("https://t.me/python_uz")


2. webbrowser.open_new_tab(url)
Yangi tabda sahifani ochadi (agar mavjud bo‘lsa).


webbrowser.open_new_tab("https://youtube.com")


💡 Qayerda ishlatiladi?

- Telegram bot yoki GUI dasturdan sahifani ochish
- Hujjat, video, manba yoki havolani avtomatik ishga tushirish
- O‘quv loyihalarda foydalanuvchiga sayt ko‘rsatish

📎 Eslatma:

- webbrowser — bu Python'ga standart o‘rnatilgan modul, alohida o‘rnatish shart emas.
- Internetga ulangan bo‘lishingiz kerak.

Misol: Foydalanuvchi o‘zi tanlagan sahifani ochish:


url = input("Sayt manzilini kiriting: ")
webbrowser.open(url)


🚀 Foydali, oddiy va juda qulay!
webbrowser — bu dasturingizni real dunyo bilan bog‘lashning eng oson yo‘llaridan biri!
Query JSON

📌 JMESPath nima?

JMESPath — bu JSON uchun so‘rov tili bo‘lib, murakkab tuzilmadagi JSON'dan kerakli ma’lumotni juda oson va aniq tarzda ajratib olish imkonini beradi. Python’da jmespath kutubxonasi orqali ishlatiladi.

🔧 Foydasi nimada?
JSON'ni qidirish juda sodda bo‘ladi
Murakkab tuzilmalar bilan ishlash osonlashadi
So‘rovlar aniq va ixcham yoziladi

🧪 Misol: Ko‘p elementli murakkab JSON bilan ishlash


import jmespath

data = {
"company": {
"name": "TechSoft",
"location": "Tashkent",
"departments": [
{
"name": "Engineering",
"employees": [
{"name": "Ali", "age": 30, "skills": ["Python", "C++"]},
{"name": "Laylo", "age": 27, "skills": ["Java", "Kotlin"]}
]
},
{
"name": "Marketing",
"employees": [
{"name": "Vali", "age": 24, "skills": ["SEO", "Content"]},
{"name": "Zarina", "age": 29, "skills": ["SMM", "Copywriting"]}
]
}
]
}
}


🔍 1. Barcha xodimlarning ismlarini olish:


result = jmespath.search("company.departments[*].employees[*].name", data)
# Natija: [['Ali', 'Laylo'], ['Vali', 'Zarina']]


🔍 2. Faqat Engineering bo‘limidagi xodimlar yoshi:


result = jmespath.search("company.departments[?name=='Engineering'].employees[*].age", data)
# Natija: [[30, 27]]


🔍 3. Marketing bo‘limidagi barcha skill'lar:


result = jmespath.search("company.departments[?name=='Marketing'].employees[*].skills", data)
# Natija: [[['SEO', 'Content'], ['SMM', 'Copywriting']]]


🔗 Ko‘proq o‘rganish uchun: jmespath.org
📦 Python kutubxonasi: pip install jmespath
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Dasturdagi xatoliklar va meni o'rtamizdagi munosabatlar🤝
🔤 swapcase() metodi — harflar registrini teskari qilish

Python'dagi swapcase() metodi — bu str (matn) tipidagi obyektlar uchun mavjud bo‘lgan ichki metod bo‘lib, har bir harfning registrini teskari qiladi.

👉 Ya’ni:
Katta harf — kichikka aylanadi
Kichik harf — kattaga aylanadi

🧪 Misol:


text = "Hello, World!"
result = text.swapcase()
print(result)  # Natija: hELLO, wORLD!


🟢 Bu metod foydali bo‘lishi mumkin:

- Matnni testlashda
- Foydalanuvchi kiritgan ma’lumotni normallashtirishda
- Kod yozishda kreativ usullarda
🔥1
⏱️ Kodingiz tezligini o‘lchang – timeit yordamida!
Ba’zida kodimiz qanchalik samarali ishlashini tezda aniqlashimiz kerak bo‘ladi. Buni oddiy time bilan emas, balki timeit moduli orqali amalga oshirgan ma’qul — bu aniq, ishonchli va takrorlanuvchan usul.

🔍 Nega aynan `timeit`?
- Qo‘shimcha xarajatlarni hisobga oladi
- Interpreter qizishini inobatga oladi
- Kodni izolyatsiyada bajaradi
- Natijani bir necha marta o‘lchab, eng real vaqtni beradi

🧪 Oddiy misol

import timeit

# Kodni 10 000 marta ishlatib, umumiy vaqtni o‘lchash
print(timeit.timeit("'-'.join(str(n) for n in range(100))", number=10000))


🔁 Ikkita yechimni solishtirish

setup_code = "nums = list(range(100))"

stmt1 = "'-'.join(str(n) for n in nums)"
stmt2 = "'-'.join(map(str, nums))"

print("Generator:", timeit.timeit(stmt1, setup=setup_code, number=10000))
print("map: ", timeit.timeit(stmt2, setup=setup_code, number=10000))


🛠 Tavsiyalar
- setup= orqali boshlang‘ich ma’lumotlarni tayyorlang
- number= bilan kod necha marta ishlatilishini belgilang
- repeat() yordamida bir necha marta o‘lchab, eng ishonchli natijani oling

🎯 Xulosa
timeit — kod yechimlarini solishtirish va eng tezini tanlash uchun ajoyib vosita. Mikrooptimizatsiya uchun ayni muddao!
🔥1
⏱️ Qanday kodlarning tezligini timeit bilan o‘lchash mumkin, qaysilariniki mumkin emas?
Kod samaradorligini tekshirishda ko‘pchilik timeit modulidan foydalanadi. Lekin har qanday kod uchun bu vosita mos kelavermaydi. Keling, nima mumkin, nima mumkin emas — aniqlashtirib olamiz.

timeit bilan o‘lchash mumkin bo‘lgan kodlar:
1. Kichik, tez ishlovchi kodlar
Misol: ro‘yxat yaratish, string birlashtirish, matematik hisoblash


timeit.timeit("sum(range(1000))", number=10000)


2. Bir nechta algoritm tezliklarini solishtirish
Masalan: map() va list comprehension. Chunki bazi holatlarda bizga eng muhim narsa tezlik bo'ladi va hattoki millisoniyalar uchun kurashamiz.


# Qaysi tezroq ishlaydi?
"'_'.join(map(str, range(100)))"
"'_'.join(str(i) for i in range(100))"


3. Funksiya ichidagi hisoblashlar (rekursiya, sikl, qidiruv)


def is_even(n): return n % 2 == 0
timeit.timeit("is_even(42)", globals=globals(), number=1000000)


timeit bilan o‘lchash tavsiya etilmaydigan kodlar:
1. Tashqi omillarga bog‘liq kodlar
(Masalan: Internet, fayl o‘qish, API so‘rovlar, ma’lumotlar bazasi)


# Bunday kodlar bir marta sekin, bir marta tez ishlashi mumkin
requests.get("https://example.com")


2. Selenium, YouTube, WebScraping kodlari
Brauzer ochilishi, sahifa yuklanishi, reklamalar, JS kodlari — bular natijani beqaror qiladi.

3. Katta resurs talab qiladigan ishlar
Masalan: katta faylni ochish, rasmni qayta ishlash, video tahlili — bular `timeit`ni haddan ortiq sekinlashtiradi.

🟡 Bunday holatlarda nima qilish kerak?
💡 Oddiy usul — time moduli yordamida vaqtni o‘lchash:


import time
start = time.time()

# Murakkab kod, masalan: web scraping
# ...

end = time.time()
print(f"Bajarilish vaqti: {end - start:.2f} soniya")


🎯 Xulosa:
Kichik, mustaqil hisob-kitob Ha
Funksiya ichidagi algoritm Ha
Web scraping / API / Selenium Yo‘q
Internetga bog‘liq ishlar Yo‘q
Katta fayl bilan ish ⚠️ Ehtiyot bilan
🔥1
Iyun oyidan boshlab video darslar tayyorlash niyatimiz bor, sizlarga qiziq mavzularni bilsak ko'proq shular bo'yicha videolar tayyorlardik