📘 #Python | enumerate() vs range(len())
🔹 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👇
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👇
👏7❤1👍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.
🧩 Ishlash mexanizmi
• for → iteratorni aylantiradi (iter + next)
• Agar sikl StopIteration orqali tugasa → else bajariladi
• Agar break ishga tushsa → else o‘tilmaydi
⚙️ Amaliy misol
🧠 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.
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.
❤3⚡2❤🔥1🔥1👏1😁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 😎
🧩 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
👉 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:
💡 Natija odatda 1.5–2 baravar tezroq bo‘ladi!
✅ 3. O‘qish oson va tushunarli
✅ 4. Filtrlash va o‘zgartirishni oson qiladi
✅ 5. Bir necha sikllarni birlashtirish
Hatto bir nechta for ni bitta list comprehension ichida ishlatish ham mumkin:
💬 Xulosa:
🔹 List comprehension — Pythonning eng qulay sintaksislaridan biri.
🔹 Kodni ixcham qiladi.
🔹 Ishlashni tezlashtiradi.
🔹 O‘qishni osonlashtiradi.
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.
👍6❤2🔥2
🎯 #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.
2️⃣ Protected — ichki foydalanish uchun
Atribut nomi _ (bitta pastki chiziq) bilan boshlanadi.
3️⃣ Private — to‘liq himoyalangan
Atribut nomi (ikki pastki chiziq) bilan boshlanadi.
🧠 Private atributga qanday murojaat qilinadi?
Odatda bevosita murojaat qilib bo‘lmaydi, faqat getter/setter orqali:
📌 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👇
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👇
❤5⚡1👍1🥰1👏1