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 | Pillow — Python’da rasm bilan ishlash kutubxonasi

Pillow — bu mashhur Python Imaging Library (PIL) kutubxonasining davomidir. U rasm fayllari bilan ishlashni soddalashtiradi va quyidagi ishlar uchun juda qulay:

🔹 Rasmni boshqa formatga o‘tkazish
🔹 Filtrlar qo‘llash
🔹 Rasmni aylantirish
🔹 Thumbnail (miniatura) yaratish
🔹 Bir nechta rasmni paketli tarzda qayta ishlash

Pillow kutubxonasini o‘rnatish:

pip install Pillow


📚 Batafsil hujjat: pypi.org/project/Pillow

🧪 Misol: Rasmdan foydalanish va uni ko‘rsatish

from PIL import Image

# Rasmni ochish
img = Image.open("rasm.jpg")

# O‘lchamini ko‘rsatish
print(img.size)

# Rasmni ko‘rsatish
img.show()


Pillow — ko‘p sonli rasmlar bilan avtomatik ishlash kerak bo‘lganda (masalan, watermark qo‘yish, format o‘zgartirish) juda mos keladi. 👌

https://t.me/simplypythonuz
#Python | Internetdan rasmni yuklab olish
Agar sizda rasmning URL manzili bo‘lsa, uni kompyuteringizga yuklab olish uchun quyidagi oddiy Python dasturidan foydalanishingiz mumkin:


import requests

# Rasm URL manzili
url = "https://example.com/image.jpg"

# HTTP so'rov yuborish
response = requests.get(url)

# Agar so'rov muvaffaqiyatli bo'lsa, faylni yozamiz
if response.status_code == 200:
with open("rasm.jpg", "wb") as file:
file.write(response.content)
print(" Rasm muvaffaqiyatli saqlandi.")
else:
print(" Rasmni yuklab bo‘lmadi.")


🧠 Eslatma:
- requests moduli Python’da vebdan ma’lumot olish uchun ishlatiladi.
- Fayl .jpg, .png, .webp formatlarda bo‘lishi mumkin — .content orqali rasm binar ko‘rinishda olinadi.
- Fayl nomini istalgancha o‘zgartirishingiz mumkin: rasm.jpgavatar.png va hokazo.

https://t.me/simplypythonuz
#Python | if shartlarini soddalashtiring
Ko‘p qiymatlarni tekshirish kerak bo‘lganda, if operatorlarini quyidagi kabi soddalashtirish mumkin:

Noto‘g‘ri (keraksiz uzun):

if x == 1 or x == 2 or x == 3:
    print("Topildi")


To‘g‘ri (soddaroq va aniq):

if x in (1, 2, 3):
    print("Topildi")


🧠 Foydali maslahat:
x in (1, 2, 3) — bu x ning 1, 2 yoki 3 ga teng ekanini tekshiradi. Kodni o‘qish osonlashadi va yozish tezlashadi.

Bunday soddalashtirishlar kodni toza, ixcham va tushunarli qilishga yordam beradi 💡

https://t.me/simplypythonuz
2
🧼 #Python | Ichki ro‘yxatlardan (nested lists) dublikatlarni o‘chirish
Ba'zida sizda shunday ro‘yxat bo‘ladi:

lists = [[1, 2], [3, 4], [1, 2]]


Va siz dublikatlarni olib tashlamoqchisiz. Ammo set dan to‘g‘ridan-to‘g‘ri foydalana olmaysiz, chunki list o‘zgaruvchan (unhashable) tur.

Oddiy va samarali yechim:

lists = [[1, 2], [3, 4], [1, 2]]

# Dublikatlarni olib tashlaymiz
unique_lists = [list(t) for t in set(tuple(lst) for lst in lists)]

print(unique_lists)
# ➝ [[1, 2], [3, 4]]


🎯 Xulosa:
- Har bir ichki ro‘yxatni tuple ga aylantiring — ular set ichida ishlaydi
- set bilan dublikatlarni yo‘q qiling
- Natijani qayta list ga aylantiring

📌 Natija: tejamkor, tez va sikllarsiz kod

https://t.me/simplypythonuz
🔍 #Python | unhashable nima degani?
Pythonda set, dict kabi xotirada tartiblanadigan ma’lumotlar tuzilmalari (hash table) faqat hashable obyektlar bilan ishlay oladi.

Hashable — bu o‘zgarmas (immutable) obyektlar, masalan:
int, float, str, tuple (agar ichida hamma narsa hashable bo‘lsa)


x = (1, 2)
set([x])  # Ishlaydi


Unhashable — bu o‘zgaruvchan (mutable) obyektlar, masalan:
list, dict, set — bu obyektlar set yoki dict kaliti sifatida ishlatilmaydi.


x = [1, 2]
set([x])  # TypeError: unhashable type: 'list'


💡 Nega bu muhim?
Agar siz list larni set ichiga solmoqchi bo‘lsangiz, avval ularni tuple ga o‘giring:

lists = [[1, 2], [3, 4], [1, 2]]

# list → tuple → set → list
unique = [list(t) for t in set(tuple(x) for x in lists)]
print(unique)


🧠 Xulosa:

- hashable → o‘zgarmas, set va dict uchun ishlaydi.
- unhashable → o‘zgaruvchan, to‘g‘ridan-to‘g‘ri set ga qo‘shib bo‘lmaydi.

https://t.me/simplypythonuz
📘 #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
📘 #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
🚀 #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
🎯 #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