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! 👇
🚀 UUID bilan xavfsiz va noyob identifikatorlarni yarating!!!
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:
🧠 Tarixdagi eng elegant matn qisqartirish usuli — textwrap.shorten() bilan tanishing!
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!
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
🔹 lower() — matndagi barcha harflarni kichik harfga aylantiradi
🔹 capitalize() — faqat birinchi harfni katta harfga aylantiradi
🔹 title() — har bir so‘zning bosh harfini katta qiladi
🔹 strip() — matn boshidagi va oxiridagi bo‘sh joylarni olib tashlaydi
🔹 replace(old, new) — matndagi old qismini new ga almashtiradi
🔹 split(sep) — matnni ajratib, ro‘yxatga (list) aylantiradi
🔹 join(list) — ro‘yxatdagi elementlarni bitta stringga qo‘shadi
🔹 find(sub) — substringning indeksini qaytaradi (topilmasa -1)
🔹 startswith(sub) / endswith(sub) — matn berilgan qism bilan boshlanadimi/tugaydimi tekshiradi
🔹 isalpha() / isdigit() / isalnum() — faqat harfmi, raqammi yoki harf+raqammi tekshiradi
🔹 zfill(width) — matnni width uzunlikka yetkazish uchun boshiga 0 qo‘shadi
✅ Ushbu metodlar matnlar bilan ishlashni oson va samarali qiladi. Dasturlash jarayonida juda foydali!
🧑💻 Siz yana qaysi metod yoki mavzuni o‘rganmoqchisiz? Izohda yozing!
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.
🔹 2. .to_bytes(length, byteorder)
Sonni baytlarga o‘giradi.
🔹 3. int.from_bytes(bytes, byteorder)
Baytdan son hosil qiladi.
🔹 4. Dunder metodlar (__add__, __sub__, ...)
Arifmetik amallar uchun ichki metodlar:
🔹 5. int() funksiyasi
Turli turlardan butun songa o‘tkazish:
🔹 6. math modulidagi funksiyalar
int bilan ishlaganda foydali bo‘ladigan funksiyalar:
✅ Bonus:
Agar int tipidagi barcha metodlarni ko‘rmoqchi bo‘lsangiz:
💡 int — oddiy ko‘ringan bo‘lsa ham, kuchli imkoniyatlarga ega! Kodlaringizda undan to‘g‘ri foydalaning 😉
⠀
🔢 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:
📌 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:
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.
⠀
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:
✅ Yuqoridagi kod — sizning standart brauzeringizda Google saytini ochadi.
📌 Foydali qo‘shimcha funksiyalar:
1. webbrowser.open_new(url)
Yangi brauzer oynasida sahifani ochadi.
2. webbrowser.open_new_tab(url)
Yangi tabda sahifani ochadi (agar mavjud bo‘lsa).
💡 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:
🚀 Foydali, oddiy va juda qulay!
webbrowser — bu dasturingizni real dunyo bilan bog‘lashning eng oson yo‘llaridan biri!
⠀
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
🔍 1. Barcha xodimlarning ismlarini olish:
🔍 2. Faqat Engineering bo‘limidagi xodimlar yoshi:
🔍 3. Marketing bo‘limidagi barcha skill'lar:
🔗 Ko‘proq o‘rganish uchun: jmespath.org
📦 Python kutubxonasi: pip install jmespath
📌 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:
🟢 Bu metod foydali bo‘lishi mumkin:
- Matnni testlashda
- Foydalanuvchi kiritgan ma’lumotni normallashtirishda
- Kod yozishda kreativ usullarda
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 –
Ba’zida kodimiz qanchalik samarali ishlashini tezda aniqlashimiz kerak bo‘ladi. Buni oddiy
🔍 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
🔁 Ikkita yechimni solishtirish
🛠 Tavsiyalar
-
-
-
🎯 Xulosa
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
Kod samaradorligini tekshirishda ko‘pchilik
✅
1. Kichik, tez ishlovchi kodlar
Misol: ro‘yxat yaratish, string birlashtirish, matematik hisoblash
2. Bir nechta algoritm tezliklarini solishtirish
Masalan:
3. Funksiya ichidagi hisoblashlar (rekursiya, sikl, qidiruv)
❌ timeit bilan o‘lchash tavsiya etilmaydigan kodlar:
1. Tashqi omillarga bog‘liq kodlar
(Masalan: Internet, fayl o‘qish, API so‘rovlar, ma’lumotlar bazasi)
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 —
🎯 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
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
Hurmatli kanalimiz a'zolari, kanalimizda qanday ma'lumotlar berib borilishini xoxlaysizlar?
Anonymous Poll
14%
Desktop applicationlar haqida
71%
Django, FastAPI bo'yicha
7%
Komentariyada ko'p so'ralgan mavzular bo'yicha darslar
36%
Kichik tayyor funksiyalar
14%
Video ko'rinishidagi darslar
36%
Pythondagi qiziqarli va ehtimol kimlar uchundir yangi bo'lgan methodlar
21%
Boshlovchilar uchun noldan tushuntirilgan videolar
Iyun oyidan boshlab video darslar tayyorlash niyatimiz bor, sizlarga qiziq mavzularni bilsak ko'proq shular bo'yicha videolar tayyorlardik
🧩 Merge Sort (Birlashtirish orqali saralash) algoritmi — Python’da amaliy ko‘rinish
🔹 Merge Sort — bu klassik “bo‘lib boshqar” (divide and conquer) yondashuviga asoslangan saralash algoritmi bo‘lib, u barqaror va ishonchli ishlashi bilan mashhur.
⚙️ Algoritm qanday ishlaydi?
1. Bo‘lish (Divide):
- Ro‘yxat teng yoki tengga yaqin ikkiga bo‘linadi.
- Har bir kichik ro‘yxat yana bo‘linadi — bu jarayon rekursiv davom etadi.
2. Birlashtirish (Merge):
- Eng kichik bo‘laklar saralanadi va ketma-ketlikda bitta tartiblangan ro‘yxatga birlashtiriladi.
🧪 Python’da amalga oshirish:
📊 Tahlil:
- ⏱️ Vaqt murakkabligi: O(n log n) (eng yaxshi, o‘rtacha va yomon holatda ham)
- 💾 Xotira murakkabligi: O(n) (qo‘shimcha xotira kerak bo‘ladi)
🛠 Optimallashtirish usullari:
✅ Kichik bo‘limlar uchun insertion sort ishlatish (kam sonli elementlarda samaraliroq)
✅ Agar pastki ro‘yxatlar allaqachon tartiblangan bo‘lsa — qayta saralashni o‘tkazib yuborish mumkin
✅ Har safar yangi ro‘yxat yaratmasdan, bitta yordamchi massiv orqali birlashtirishni amalga oshirish — bu xotira sarfini kamaytiradi
🔚 Merge Sort — bu algoritmik jihatdan samarali va doimiy O(n log n) ishlash kafolatini beruvchi kuchli usul. Kodni tushunish oson, optimallashtirish imkoniyatlari esa uni real loyihalarda ishlatishga mos qiladi.
🔹 Merge Sort — bu klassik “bo‘lib boshqar” (divide and conquer) yondashuviga asoslangan saralash algoritmi bo‘lib, u barqaror va ishonchli ishlashi bilan mashhur.
⚙️ Algoritm qanday ishlaydi?
1. Bo‘lish (Divide):
- Ro‘yxat teng yoki tengga yaqin ikkiga bo‘linadi.
- Har bir kichik ro‘yxat yana bo‘linadi — bu jarayon rekursiv davom etadi.
2. Birlashtirish (Merge):
- Eng kichik bo‘laklar saralanadi va ketma-ketlikda bitta tartiblangan ro‘yxatga birlashtiriladi.
🧪 Python’da amalga oshirish:
def merge_sort(arr):
if len(arr) <= 1:
return arr
middle = len(arr) // 2
left = merge_sort(arr[:middle])
right = merge_sort(arr[middle:])
return merge(left, right)
def merge(left, right):
result = []
i = j = 0
# Ikkala ro‘yxatni solishtirib birlashtiramiz
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
# Qolgan elementlarni qo‘shamiz
result.extend(left[i:])
result.extend(right[j:])
return result
# Misol:
nums = [38, 27, 43, 3, 9, 82, 10]
print(merge_sort(nums)) # Natija [3, 9, 10, 27, 38, 43, 82]
📊 Tahlil:
- ⏱️ Vaqt murakkabligi: O(n log n) (eng yaxshi, o‘rtacha va yomon holatda ham)
- 💾 Xotira murakkabligi: O(n) (qo‘shimcha xotira kerak bo‘ladi)
🛠 Optimallashtirish usullari:
✅ Kichik bo‘limlar uchun insertion sort ishlatish (kam sonli elementlarda samaraliroq)
✅ Agar pastki ro‘yxatlar allaqachon tartiblangan bo‘lsa — qayta saralashni o‘tkazib yuborish mumkin
✅ Har safar yangi ro‘yxat yaratmasdan, bitta yordamchi massiv orqali birlashtirishni amalga oshirish — bu xotira sarfini kamaytiradi
🔚 Merge Sort — bu algoritmik jihatdan samarali va doimiy O(n log n) ishlash kafolatini beruvchi kuchli usul. Kodni tushunish oson, optimallashtirish imkoniyatlari esa uni real loyihalarda ishlatishga mos qiladi.
🔗 Python’da istisnolarni zanjirlash (exception chaining) — xatoliklar sababi yo‘qolib ketmasin
Dasturda murakkab jarayonlar bajarilganda, ichma-ich try-except bloklar bo‘lishi odatiy hol. Ba’zida bir xatolik boshqa bir xatolikni keltirib chiqaradi. Ana shunday vaziyatda istisnolarni zanjirlash texnikasi ishga tushadi.
Python’da bu raise ... from ... sintaksisi orqali amalga oshiriladi.
🧠 "Istisnolarni zanjirlash" o'zi nima?
Bu — bir istisno (xatolik) boshqa bir istisnoning natijasi ekanini aniq ko‘rsatish imkonini beradi. Ya’ni, dasturning yuqori darajasida xatolik chiqqanda, u avvalgi chuqurroq xatolikdan kelib chiqqanini yo‘qotmasdan bildiradi.
🧪 Misol:
🔍 Bu yerda:
- 1 / 0 — ZeroDivisionError xatosini keltirib chiqaradi
- U except blokida ushlanadi
- Yangi istisno (ValueError) shu xatolik asosida qayta chiqariladi
- from e — eski istisno (e) bilan bog‘laydi
📋 Natijada konsolda quyidagi zanjirli xatolik chiqadi:
➡️ Bu yerda ikkita xatolik birgalikda ko‘rsatilgan. Ilk sabab (0 ga bo‘lish) yo‘qolmaydi.
📌 Qanday foyda bor?
- Dasturchi sifatida asl xatoni aniqlash ancha oson bo‘ladi
- Log fayllari yoki monitoring tizimlarida muammoning kelib chiqish tarixini ko‘rish mumkin
- Xatoliklar ichki kontekstda saqlanadi, ya’ni nima sababli nima yuz bergani aniq yoziladi
⚠️ E’tiborli jihat:
Agar from qismini yozmasangiz, Python avtomatik tarzda context orqali istisnoni bog‘lab qo‘yadi, lekin bu holatda xatolik "during handling of the above exception" degan ko‘rinishda chiqadi. Ammo from orqali yozish — aniq, toza va nazorat ostidagi usul hisoblanadi.
🔚 Xulosa:
raise ... from ... — murakkab dasturlarda xatoliklarni shaffof va chuqur tahlil qilish imkonini beruvchi kuchli vosita.
Uni o‘z loyihalaringizda ishlatish — professional yondashuv belgisidir.
Dasturda murakkab jarayonlar bajarilganda, ichma-ich try-except bloklar bo‘lishi odatiy hol. Ba’zida bir xatolik boshqa bir xatolikni keltirib chiqaradi. Ana shunday vaziyatda istisnolarni zanjirlash texnikasi ishga tushadi.
Python’da bu raise ... from ... sintaksisi orqali amalga oshiriladi.
🧠 "Istisnolarni zanjirlash" o'zi nima?
Bu — bir istisno (xatolik) boshqa bir istisnoning natijasi ekanini aniq ko‘rsatish imkonini beradi. Ya’ni, dasturning yuqori darajasida xatolik chiqqanda, u avvalgi chuqurroq xatolikdan kelib chiqqanini yo‘qotmasdan bildiradi.
🧪 Misol:
def hisobla():
try:
natija = 1 / 0
except ZeroDivisionError as e:
raise ValueError("Hisoblashda xatolik!") from e
hisobla()
🔍 Bu yerda:
- 1 / 0 — ZeroDivisionError xatosini keltirib chiqaradi
- U except blokida ushlanadi
- Yangi istisno (ValueError) shu xatolik asosida qayta chiqariladi
- from e — eski istisno (e) bilan bog‘laydi
📋 Natijada konsolda quyidagi zanjirli xatolik chiqadi:
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
ValueError: Hisoblashda xatolik!
➡️ Bu yerda ikkita xatolik birgalikda ko‘rsatilgan. Ilk sabab (0 ga bo‘lish) yo‘qolmaydi.
📌 Qanday foyda bor?
- Dasturchi sifatida asl xatoni aniqlash ancha oson bo‘ladi
- Log fayllari yoki monitoring tizimlarida muammoning kelib chiqish tarixini ko‘rish mumkin
- Xatoliklar ichki kontekstda saqlanadi, ya’ni nima sababli nima yuz bergani aniq yoziladi
⚠️ E’tiborli jihat:
Agar from qismini yozmasangiz, Python avtomatik tarzda context orqali istisnoni bog‘lab qo‘yadi, lekin bu holatda xatolik "during handling of the above exception" degan ko‘rinishda chiqadi. Ammo from orqali yozish — aniq, toza va nazorat ostidagi usul hisoblanadi.
🔚 Xulosa:
raise ... from ... — murakkab dasturlarda xatoliklarni shaffof va chuqur tahlil qilish imkonini beruvchi kuchli vosita.
Uni o‘z loyihalaringizda ishlatish — professional yondashuv belgisidir.
👍1🔥1