🧊
Aytaylik bizga ro'yxatlar lug'ati berilgan va qaysidir kalitga mos keluvchi ro'yxatga berilgan elementni qo'shishimiz kerak, agar ushbu kalit lug'atda yo'q bo'lsa, shunday kalitli yangi ro'yxat ochiladi va berilgan element qo'shilishi kerak.
📘 Berilgan ro'yxatlar lug'ati:
Bu yerda:
- kalitlar — o‘quvchilar
- qiymatlar — ularning baholari ro‘yxati
Biz Valiga 5 baho, yangi kelgan Zafarga 4 baho qo'shishimiz kerak!
🛠Masalaning oddiy yechimi (uzoq va if bilan):
✅ setdefault() orqali masala yechimi (qisqaroq):
🟢 Kalit mavjud bo‘lmasa — yangi [] ro‘yxat ochiladi
🟢 Mavjud bo‘lsa — unga bevosita qo‘shiladi
Ikkala holatda ham natija bir xil:
🎯 Foydalari:
❌ Ortiqcha if va tekshiruvlar yo‘q
✅ Kod qisqaroq, aniqroq, o‘qilishi oson
🧩 Juda qulay bo‘lib, group by uslublarida ko‘p ishlatiladi
📌 Eslatma: setdefault() faqat kalit mavjud bo‘lmasa, yangi qiymat o‘rnatadi — agar bor bo‘lsa, mavjudini qaytaradi.
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
setdefault() — lug‘at bilan ishlashni soddalashtiruvchi qulay usulAytaylik bizga ro'yxatlar lug'ati berilgan va qaysidir kalitga mos keluvchi ro'yxatga berilgan elementni qo'shishimiz kerak, agar ushbu kalit lug'atda yo'q bo'lsa, shunday kalitli yangi ro'yxat ochiladi va berilgan element qo'shilishi kerak.
📘 Berilgan ro'yxatlar lug'ati:
grades = {
"Ali": [5, 4, 5],
"Vali": [3, 4],
"Aziza": [5, 5, 5]
}
Bu yerda:
- kalitlar — o‘quvchilar
- qiymatlar — ularning baholari ro‘yxati
Biz Valiga 5 baho, yangi kelgan Zafarga 4 baho qo'shishimiz kerak!
🛠Masalaning oddiy yechimi (uzoq va if bilan):
grades = {
"Ali": [5, 4, 5],
"Vali": [3, 4],
"Aziza": [5, 5, 5]
}
key = 'Vali'
key1 = 'Zafar'
if key not in grades:
grades[key] = []
grades[key].append(5)
if key1 not in grades:
grades[key1] = []
grades[key1].append(4)
✅ setdefault() orqali masala yechimi (qisqaroq):
grades = {
"Ali": [5, 4, 5],
"Vali": [3, 4],
"Aziza": [5, 5, 5]
}
grades.setdefault('Vali', []).append(5)
grades.setdefault('Zafar', []).append(4)
🟢 Kalit mavjud bo‘lmasa — yangi [] ro‘yxat ochiladi
🟢 Mavjud bo‘lsa — unga bevosita qo‘shiladi
Ikkala holatda ham natija bir xil:
{
'Ali': [5, 4, 5],
'Vali': [3, 4, 5],
'Aziza': [5, 5, 5],
'Zafar': [4]
}
🎯 Foydalari:
❌ Ortiqcha if va tekshiruvlar yo‘q
✅ Kod qisqaroq, aniqroq, o‘qilishi oson
🧩 Juda qulay bo‘lib, group by uslublarida ko‘p ishlatiladi
📌 Eslatma: setdefault() faqat kalit mavjud bo‘lmasa, yangi qiymat o‘rnatadi — agar bor bo‘lsa, mavjudini qaytaradi.
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
🔍
📌 Lokal jadval — bu Python dasturida belgilangan joyda mavjud bo‘lgan barcha nomlar (o‘zgaruvchilar, funksiyalar, klasslar va hokazo) saqlanadigan tuzilma.
🧠 Agar
🔎 Bu misolda:
• x va z — lokal o‘zgaruvchilar,
• y esa global va locals() natijasiga kirmaydi.
📤 Ushbu xatti-harakat sizga kodni tahlil qilishda yoki xatoliklarni aniqlashda foydali bo'lishi mumkin.
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
locals() funksiyasilocals() — bu Python'dagi maxsus funksiya bo‘lib, u hozirgi lokal o‘zgaruvchilar jadvalini lug‘at (dict) ko‘rinishida qaytaradi.📌 Lokal jadval — bu Python dasturida belgilangan joyda mavjud bo‘lgan barcha nomlar (o‘zgaruvchilar, funksiyalar, klasslar va hokazo) saqlanadigan tuzilma.
🧠 Agar
locals() funksiyasi funksiya ichida chaqirilsa, u faqat shu funksiya ichida aniqlangan o‘zgaruvchilarni qaytaradi.
y = 20
def my_func():
x = 5
z = x + 10
print(locals())
my_func()
🔎 Bu misolda:
• x va z — lokal o‘zgaruvchilar,
• y esa global va locals() natijasiga kirmaydi.
📤 Ushbu xatti-harakat sizga kodni tahlil qilishda yoki xatoliklarni aniqlashda foydali bo'lishi mumkin.
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Saralash algoritmlari (sorting algorithms)
Quyida Python yoki boshqa dasturlash tillarida keng qo‘llaniladigan asosiy saralash algoritmlari va ularning tavsifi, afzalliklari, kamchiliklari va kod namunalarini ko‘rib chiqamiz.
🔹 1. Bubble Sort (pufakcha tartiblash)
Tavsifi:
• Har bir qo‘shni elementlarni taqqoslab, kerak bo‘lsa joyini almashtiradi.
• Eng oddiy, lekin sust.
Vaqt murakkabligi:
• Eng yomon holatda: O(n²)
Kod:
🔹 2. Selection Sort
Tavsifi:
• Har safar eng kichik elementni topadi va o‘z o‘rniga qo‘yadi.
Vaqt murakkabligi:
• Har doim: O(n²)
Kod:
🔹 3. Insertion Sort
Tavsifi:
• Har bir elementni oldingi tartiblangan qismga joylashtiradi.
• Kichik ro‘yxatlar uchun yaxshi.
Vaqt murakkabligi:
• Eng yomon holatda: O(n²)
• Eng yaxshi (tartiblangan holatda): O(n)
Kod:
🔹 4. Merge Sort (ajrat va birlashtir)
Tavsifi:
• Ro‘yxatni ikkiga bo‘lib, har bir qismini tartiblaydi va birlashtiradi.
Vaqt murakkabligi:
• Har doim: O(n log n)
Kod:
🔹 5. Quick Sort
Tavsifi:
• Pivot tanlanadi, undan kichik va katta elementlarga bo‘linadi.
• Juda samarali.
Vaqt murakkabligi:
• O‘rtacha: O(n log n)
• Eng yomon (yomon pivot tanlansa): O(n²)
Kod:
🔹 6. Heap Sort
Tavsifi:
• Max/min heap quriladi va elementlar o‘chiriladi.
• O(n log n)
Kod:
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
Quyida Python yoki boshqa dasturlash tillarida keng qo‘llaniladigan asosiy saralash algoritmlari va ularning tavsifi, afzalliklari, kamchiliklari va kod namunalarini ko‘rib chiqamiz.
🔹 1. Bubble Sort (pufakcha tartiblash)
Tavsifi:
• Har bir qo‘shni elementlarni taqqoslab, kerak bo‘lsa joyini almashtiradi.
• Eng oddiy, lekin sust.
Vaqt murakkabligi:
• Eng yomon holatda: O(n²)
Kod:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
🔹 2. Selection Sort
Tavsifi:
• Har safar eng kichik elementni topadi va o‘z o‘rniga qo‘yadi.
Vaqt murakkabligi:
• Har doim: O(n²)
Kod:
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_idx = i
for j in range(i+1, n):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
🔹 3. Insertion Sort
Tavsifi:
• Har bir elementni oldingi tartiblangan qismga joylashtiradi.
• Kichik ro‘yxatlar uchun yaxshi.
Vaqt murakkabligi:
• Eng yomon holatda: O(n²)
• Eng yaxshi (tartiblangan holatda): O(n)
Kod:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
🔹 4. Merge Sort (ajrat va birlashtir)
Tavsifi:
• Ro‘yxatni ikkiga bo‘lib, har bir qismini tartiblaydi va birlashtiradi.
Vaqt murakkabligi:
• Har doim: O(n log n)
Kod:
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
L = merge_sort(arr[:mid])
R = merge_sort(arr[mid:])
result = []
i = j = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
result.append(L[i])
i += 1
else:
result.append(R[j])
j += 1
result += L[i:]
result += R[j:]
return result
return arr
🔹 5. Quick Sort
Tavsifi:
• Pivot tanlanadi, undan kichik va katta elementlarga bo‘linadi.
• Juda samarali.
Vaqt murakkabligi:
• O‘rtacha: O(n log n)
• Eng yomon (yomon pivot tanlansa): O(n²)
Kod:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = [x for x in arr[1:] if x <= pivot]
right = [x for x in arr[1:] if x > pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
🔹 6. Heap Sort
Tavsifi:
• Max/min heap quriladi va elementlar o‘chiriladi.
• O(n log n)
Kod:
import heapq
def heap_sort(arr):
heapq.heapify(arr)
return [heapq.heappop(arr) for _ in range(len(arr))]
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
🔄 Python’da lug‘atni teskari qilish — kalit ↔️ qiymatni almashtirish
Ba’zida sizga lug‘atning kalitlari va qiymatlarini joyini almashtirish kerak bo‘ladi. Python’da buni juda elegant va qisqa tarzda qilish mumkin.
📘 Misol:
🧠 Bu yerda
Ya’ni kalitlar qiymatga, qiymatlar kalitga aylanadi.
⚠️ Muhim eslatma:
✅ Qiymatlar:
• unikal (takrorlanmas) bo‘lishi kerak
• hashlanadigan (ya’ni int, str, tuple kabi) turda bo‘lishi kerak
❌ Aks holda, Python xatolik beradi yoki ba’zi qiymatlar yo‘qolib qoladi!
🎯 Natija:
🔹 Teskari lug‘at yaratish — oddiy va o‘qilishi oson
🔹 Kod — bitta qatorda bajariladi
🔹 Juda ko‘p real holatlarda (masalan, ID ↔️ ism) foydali
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Ba’zida sizga lug‘atning kalitlari va qiymatlarini joyini almashtirish kerak bo‘ladi. Python’da buni juda elegant va qisqa tarzda qilish mumkin.
📘 Misol:
original = {'a': 1, 'b': 2, 'c': 3}
reversed_dict = {v: k for k, v in original.items()}
print(reversed_dict) # ➝ {1: 'a', 2: 'b', 3: 'c'}
🧠 Bu yerda
v: k — yangi kalit va qiymat.Ya’ni kalitlar qiymatga, qiymatlar kalitga aylanadi.
⚠️ Muhim eslatma:
✅ Qiymatlar:
• unikal (takrorlanmas) bo‘lishi kerak
• hashlanadigan (ya’ni int, str, tuple kabi) turda bo‘lishi kerak
❌ Aks holda, Python xatolik beradi yoki ba’zi qiymatlar yo‘qolib qoladi!
🎯 Natija:
🔹 Teskari lug‘at yaratish — oddiy va o‘qilishi oson
🔹 Kod — bitta qatorda bajariladi
🔹 Juda ko‘p real holatlarda (masalan, ID ↔️ ism) foydali
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
🧱
Agar siz Python’da o‘zingizning maxsus
🧠 Nima u?
U orqali siz:
• O‘z klassingizni
• API-larga, kutubxonalarga uni
📘 Asosiy metodlar:
Agar siz
• __getitem__(self, key) – qiymatni olish
• __setitem__(self, key, value) – qiymatni o‘rnatish
• __delitem__(self, key) – elementni o‘chirish
• __iter__(self) – lug‘atni aylanish
• __len__(self) – uzunligini qaytarish
Bularni yozsangiz, qolgan barcha dict metodlari avtomatik ishlaydi!
🔧 Misol:
🎯 Foydasi:
✅ Siz yaratgan klass
✅ Uni
✅ Tayyor
🧩 Xulosa:
U yordamida siz moslashuvchan va kuchli ma’lumot tuzilmalarini yaratishingiz mumkin.
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
MutableMapping — o‘zingizga xos lug‘at yaratish interfeysiAgar siz Python’da o‘zingizning maxsus
dict kabi klassingizni yozmoqchi bo‘lsangiz, collections.abc.MutableMapping yordam beradi.🧠 Nima u?
MutableMapping — bu dict’ga o‘xshagan obyektlar uchun tayyor interfeys.U orqali siz:
• O‘z klassingizni
dict kabi tutishingiz mumkin• API-larga, kutubxonalarga uni
dict sifatida uzatishingiz mumkin📘 Asosiy metodlar:
Agar siz
MutableMapping dan meros olsangiz, quyidagi metodlarni majburiy yozishingiz kerak:• __getitem__(self, key) – qiymatni olish
• __setitem__(self, key, value) – qiymatni o‘rnatish
• __delitem__(self, key) – elementni o‘chirish
• __iter__(self) – lug‘atni aylanish
• __len__(self) – uzunligini qaytarish
Bularni yozsangiz, qolgan barcha dict metodlari avtomatik ishlaydi!
🔧 Misol:
from collections.abc import MutableMapping
class MyDict(MutableMapping):
def __init__(self):
self._store = {}
def __getitem__(self, key):
return self._store[key]
def __setitem__(self, key, value):
self._store[key] = value
def __delitem__(self, key):
del self._store[key]
def __iter__(self):
return iter(self._store)
def __len__(self):
return len(self._store)
# Foydalanish:
d = MyDict()
d["a"] = 10
print(d["a"]) # ➝ 10
🎯 Foydasi:
✅ Siz yaratgan klass
dict kabi ishlaydi✅ Uni
json, pprint, **kwargs yoki dict kutgan joylarga yuborish mumkin✅ Tayyor
clear(), get(), update() kabi funksiyalar avtomatik ishlaydi🧩 Xulosa:
MutableMapping — bu o‘zining dict ko‘rinishidagi obyektlarini yaratmoqchi bo‘lganlar uchun tayyor andoza (shablon).U yordamida siz moslashuvchan va kuchli ma’lumot tuzilmalarini yaratishingiz mumkin.
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
🧩
Python’dagi
Agar siz lug‘atda har bir kalitga ro‘yxat biriktirayotgan bo‘lsangiz,
🛠 Oddiy dict bilan:
🧨 Juda ko‘p
✅
🔹 Har safar yangi kalit chaqirilsa,
🔹
🔹 Kod — toza va qisqa
🎯 Qachon ishlatiladi?
🧮 Kategoriya → qiymatlar ro‘yxati
🧑 O‘quvchi → baholari
🏷 So‘z → joylashuvlari
📊 Ma’lumotlarni guruhlash
🧠 Shuningdek, boshqa tiplarda ham ishlaydi:
🔚 Xulosa:
✅ defaultdict(list) — dict + setdefault() + avtomatika!
🔹 Kamroq xatolik
🔹 Kamroq kod
🔹 Ko‘proq qulaylik
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
defaultdict(list) — ro‘yxatlar lug‘atini avtomatik boshqarish!Python’dagi
collections.defaultdict — bu oddiy dict ning qulayroq shakli bo‘lib, har bir yangi kalit uchun avtomatik boshlang‘ich qiymat yaratadi.Agar siz lug‘atda har bir kalitga ro‘yxat biriktirayotgan bo‘lsangiz,
defaultdict(list) — ideal vosita!🛠 Oddiy dict bilan:
data = {}
key = "apple"
if key not in data:
data[key] = []
data[key].append(1)
🧨 Juda ko‘p
if va takroriy kod…✅
defaultdict(list) bilan:
from collections import defaultdict
data = defaultdict(list)
data["apple"].append(1)
data["apple"].append(2)
print(data) # ➝ {'apple': [1, 2]}
🔹 Har safar yangi kalit chaqirilsa,
list() avtomatik chaqiladi🔹
KeyError yo‘q, if tekshiruvlari yo‘q🔹 Kod — toza va qisqa
🎯 Qachon ishlatiladi?
🧮 Kategoriya → qiymatlar ro‘yxati
🧑 O‘quvchi → baholari
🏷 So‘z → joylashuvlari
📊 Ma’lumotlarni guruhlash
🧠 Shuningdek, boshqa tiplarda ham ishlaydi:
defaultdict(int) # 0 dan boshlaydi
defaultdict(set) # Bo‘sh to‘plamdan boshlaydi
defaultdict(str) # Bo‘sh satr
🔚 Xulosa:
✅ defaultdict(list) — dict + setdefault() + avtomatika!
🔹 Kamroq xatolik
🔹 Kamroq kod
🔹 Ko‘proq qulaylik
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
https://t.me/simplypythonuz
🔹 Python bo‘yicha maslahat: zip vs zip_longest
Agar uzunligi har xil bo‘lgan ro‘yxatlarni birlashtirmoqchi bo‘lsangiz — zip() o‘rniga itertools.zip_longest() dan foydalaning.
🤔 Nega?
•
•
• fillvalue orqali yetishmayotgan qiymatlar uchun o‘rindosh qiymat berish mumkin:
✅ Agar barcha ma’lumotlarni saqlash muhim bo‘lsa — zip_longest() dan foydalaning!
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Agar uzunligi har xil bo‘lgan ro‘yxatlarni birlashtirmoqchi bo‘lsangiz — zip() o‘rniga itertools.zip_longest() dan foydalaning.
🤔 Nega?
•
zip() eng qisqa ro‘yxat tugagach to‘xtaydi:
>>> harflar = ['a', 'b', 'c']
>>> raqamlar = [1, 2]
>>> list(zip(harflar, raqamlar))
[('a', 1), ('b', 2)]
•
zip_longest() esa eng uzun ro‘yxat tugaguncha davom etadi:
>>> from itertools import zip_longest
>>> list(zip_longest(harflar, raqamlar))
[('a', 1), ('b', 2), ('c', None)]
• fillvalue orqali yetishmayotgan qiymatlar uchun o‘rindosh qiymat berish mumkin:
>>> list(zip_longest(harflar, raqamlar, fillvalue='Yo‘q'))
[('a', 1), ('b', 2), ('c', 'Yo‘q')]
✅ Agar barcha ma’lumotlarni saqlash muhim bo‘lsa — zip_longest() dan foydalaning!
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
❤1
Fabrika dekoratorlar nima?
Fabrika dekoratori — bu yuqori tartibli (high-order) funksiyalarning maxsus turi bo‘lib, u natija sifatida dekoratorni qaytaradi, oddiy funksiya emas.
🧩 Farqi nimada?
Oddiy dekoratorlar funksiyani bevosita bezaydi, fabrika dekoratorlar esa parametrlar qabul qilib, ularning asosida dekorator yasaydi. Ya’ni, ular sozlanadigan dekoratorlar yaratish imkonini beradi.
🔧 Misol:
Masalan, fabrika dekorator log-fayl nomini yoki log darajasini parametr sifatida qabul qilishi mumkin:
Yuqoridagi kodda @log_to("log.txt") — bu dekorator fabrikasi orqali yaratilgan dekorator.
✅ Afzalliklari:
• Qayta ishlatiladigan dekoratorlar yaratish mumkin
• Kod takrorlanishini oldini oladi
• Moslashuvchan va intuitiv API yaratish imkonini beradi
🚀 Natija:
say_hello() funksiyasi ishga tushganda:
•
• Konsolda
📂 log.txt fayl ichida:
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Fabrika dekoratori — bu yuqori tartibli (high-order) funksiyalarning maxsus turi bo‘lib, u natija sifatida dekoratorni qaytaradi, oddiy funksiya emas.
🧩 Farqi nimada?
Oddiy dekoratorlar funksiyani bevosita bezaydi, fabrika dekoratorlar esa parametrlar qabul qilib, ularning asosida dekorator yasaydi. Ya’ni, ular sozlanadigan dekoratorlar yaratish imkonini beradi.
🔧 Misol:
Masalan, fabrika dekorator log-fayl nomini yoki log darajasini parametr sifatida qabul qilishi mumkin:
def log_to(file_name):
def decorator(func):
def wrapper(*args, **kwargs):
with open(file_name, 'a') as f:
f.write(f"Calling {func.__name__}\n")
return func(*args, **kwargs)
return wrapper
return decorator
@log_to("log.txt")
def say_hello():
print("Hello!")
Yuqoridagi kodda @log_to("log.txt") — bu dekorator fabrikasi orqali yaratilgan dekorator.
✅ Afzalliklari:
• Qayta ishlatiladigan dekoratorlar yaratish mumkin
• Kod takrorlanishini oldini oladi
• Moslashuvchan va intuitiv API yaratish imkonini beradi
🚀 Natija:
say_hello() funksiyasi ishga tushganda:
•
log.txt fayliga Calling say_hello yoziladi• Konsolda
"Hello!" chiqadi📂 log.txt fayl ichida:
Calling say_hello
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
🖥 Pythonda eng yomon kodni qanday yozish mumkin?
Ba’zan qanday yozmaslik kerakligini ko‘rsatish — qanday yozishni tushuntirishdan osonroq.
Quyidagi “qoidalar” har qanday Python loyihasini ishonch bilan buzib tashlashingizga yordam beradi.
1. 🔒 Tushunarsiz o‘zgaruvchi nomlari ishlating
2. 🧠 Barcha mantiqni bitta qatorda yozing
Ternar ifodalar,
3. ⚠️ eval() va exec() ishlating
Sekin, xavfli va... "ajoyib" 🤡
4. 🔁 Bir o‘zgaruvchiga turli tiplar bering
5. 🌍 Global o‘zgaruvchilarni ishlating
Har joydan holatni o‘zgartiring. Ayniqsa funksiyalardan.
6. 🔮 "Sehrli" sonlar va matnlar yozing
Hech qanday izohsiz
7. 📏 PEP8? Yo‘q, eshitmaganman.
Stil? Otstup? Kimga kerak?
8. 🧱 Stack Overflow’dan ko‘chir, nima bo‘pti
Ctrl+C = professional dasturchilik 😅
9. 🧩 Keraksiz abstraktsiyalar o‘ylab top
Oddiy funksiya? Yo‘q, bizga klass, fabrika va strategiya kerak!
10. 💤 O‘lik kodni o‘chirib yuborma
Hech qachon. Balki kerak bo‘lib qolar…
11. 🔀 Hujjat yozma, kim o‘qiydi uni
Komment — faqat ortiqcha yuk.
12. 🧪 Test yozmasdan yashang
Kod ishlayaptimi? Demak yetarli.
13. 🤖 AI? Autocompletion? YO‘Q!
Faqat qo‘l bilan yozish — xatolar orqali ustaga aylanish!
🧠 Xulosa
Yuqoridagilarning barchasi — qanday YOMON kod yozish mumkinligini ko‘rsatadi.
Agar o‘zingizni tanigan bo'lsangiz, To‘xtang. Python — bu soddalik va o‘qilishi oson til.
“Beautiful is better than ugly.
Explicit is better than implicit.
Readability counts.”
— The Zen of Python
tarjimasi:
“Chiroyli — xunukdan yaxshiroq.
Aniq (ravshan) — noaniqdan yaxshiroq.
O‘qilishi muhim.”
— Python falsafasidan (The Zen of Python)
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Ba’zan qanday yozmaslik kerakligini ko‘rsatish — qanday yozishni tushuntirishdan osonroq.
Quyidagi “qoidalar” har qanday Python loyihasini ishonch bilan buzib tashlashingizga yordam beradi.
1. 🔒 Tushunarsiz o‘zgaruvchi nomlari ishlating
x, y, a, thing — ideal tanlov. Abstraktsiya = chalkashlik.
def f(x, y, z=None):
a = x * 2
b = y + a if z else y - a
c = [i for i in range(a) if i % 2]
return sum(c) + b
2. 🧠 Barcha mantiqni bitta qatorda yozing
Ternar ifodalar,
list comprehension, shartlar — barchasi bitta satrda.
result = [x if x > 0 else (y if y < 0 else z) for x in data if x or y and not z]
3. ⚠️ eval() va exec() ishlating
Sekin, xavfli va... "ajoyib" 🤡
eval("d['" + key + "']")
4. 🔁 Bir o‘zgaruvchiga turli tiplar bering
value — dastlab string, keyin int, keyin list. Dinamik tipizatsiya-ku!
value = "42"
value = int(value)
value = [value] * value
5. 🌍 Global o‘zgaruvchilarni ishlating
Har joydan holatni o‘zgartiring. Ayniqsa funksiyalardan.
counter = 0
def increment():
global counter
counter += 1
6. 🔮 "Sehrli" sonlar va matnlar yozing
Hech qanday izohsiz
42 yoki "xyz" ishlating.
if user.role == "xyz" and user.level > 42:
access_granted()
7. 📏 PEP8? Yo‘q, eshitmaganman.
Stil? Otstup? Kimga kerak?
def foo():print("start")
if True:
print("yes")
else:
print("no")
8. 🧱 Stack Overflow’dan ko‘chir, nima bo‘pti
Ctrl+C = professional dasturchilik 😅
def complex_logic(x):
return (lambda y: (lambda z: z**2)(y + 1))(x)
9. 🧩 Keraksiz abstraktsiyalar o‘ylab top
Oddiy funksiya? Yo‘q, bizga klass, fabrika va strategiya kerak!
class HandlerFactory:
def get_handler(self):
class Handler:
def handle(self, x): return x
return Handler()
10. 💤 O‘lik kodni o‘chirib yuborma
Hech qachon. Balki kerak bo‘lib qolar…
def legacy_feature():
print("Bu funksiya eskirgan")
return
# hech qayerda chaqirilmaydi
11. 🔀 Hujjat yozma, kim o‘qiydi uni
Komment — faqat ortiqcha yuk.
def a(x): return x+1
12. 🧪 Test yozmasdan yashang
Kod ishlayaptimi? Demak yetarli.
# Faqat run bos va kuzat
process_user(data)
13. 🤖 AI? Autocompletion? YO‘Q!
Faqat qo‘l bilan yozish — xatolar orqali ustaga aylanish!
🧠 Xulosa
Yuqoridagilarning barchasi — qanday YOMON kod yozish mumkinligini ko‘rsatadi.
Agar o‘zingizni tanigan bo'lsangiz, To‘xtang. Python — bu soddalik va o‘qilishi oson til.
“Beautiful is better than ugly.
Explicit is better than implicit.
Readability counts.”
— The Zen of Python
tarjimasi:
“Chiroyli — xunukdan yaxshiroq.
Aniq (ravshan) — noaniqdan yaxshiroq.
O‘qilishi muhim.”
— Python falsafasidan (The Zen of Python)
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
🔧 Plumbum — Python’da komandalar bilan ishlashni osonlashtiradi!
📌 Asosiy imkoniyatlari:
✅ Komandalarni funksiyalar kabi chaqirish
✅ Avtomatik komanda satri tuzish
✅ I/O oqimlarini boshqarish (stdin/stdout)
✅ Lokal va masofaviy ishga tushirish (SSH orqali)
🧪 Misol:
👆 Bu kod
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Plumbum — bu komandalar satri (CLI) bilan ishlashni soddalashtiradigan kuchli Python kutubxonasi. U orqali tashqi dasturlarni chaqirish, skriptlarni ishga tushurish va avtomatlashtirish juda oson!📌 Asosiy imkoniyatlari:
✅ Komandalarni funksiyalar kabi chaqirish
✅ Avtomatik komanda satri tuzish
✅ I/O oqimlarini boshqarish (stdin/stdout)
✅ Lokal va masofaviy ishga tushirish (SSH orqali)
🧪 Misol:
from plumbum import local
ls = local["ls"]
print(ls("-l", "/home"))
👆 Bu kod
ls -l /home komandasini bajaradi va natijani konsolga chiqaradi. Oddiy, tushunarli va Python-ichida ishlaydi!Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
🧪 Obyekt atributi mavjudligini tekshirish — try/except’ga hojat yo‘q!
Ba’zida obyektning ma’lum bir xususiyatga ega yoki yo‘qligini bilish kerak bo‘ladi. Bunday holatda
✅ Buning uchun
🔍 Misol:
🎯 Xulosa:
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Ba’zida obyektning ma’lum bir xususiyatga ega yoki yo‘qligini bilish kerak bo‘ladi. Bunday holatda
try/except bloklaridan foydalanish shart emas.✅ Buning uchun
hasattr() funksiyasi mavjud — qisqa va qulay yechim!🔍 Misol:
class Person:
name = "Ali"
p = Person()
print(hasattr(p, "name")) # True
print(hasattr(p, "age")) # False
🎯 Xulosa:
hasattr() — bu obyektning atributi mavjudligini aniq, toza va o‘qilishi oson tarzda tekshirish imkonini beradi. Ortiqcha kod yozish shart emas!Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Modul asosidagi dasturlash nima?
Modul asosidagi dasturlash — bu dastur kodini strukturalashtirish yondashuvi bo‘lib, unda funksiyalar alohida modullarga ajratiladi.
🔍 Modul dasturlashning asosiy afzalliklari:
✅ Har bir modul aniq vazifani bajaradi — bu kodni o‘qishni va tushunishni osonlashtiradi.
✅ Modullarni dasturning turli qismlarida qayta ishlatish mumkin.
✅ Har bir modulni alohida test qilish va nosozliklarni topish osonlashadi.
✅ Jamoada ishlaganda ishni bo‘lib olish va parallel rivojlantirish qulay bo‘ladi.
✅ Kodni yangilash va qo‘llab-quvvatlash soddalashadi.
📦 Modul yondashuvi — katta loyihalar uchun ayni muddao!
https://t.me/simplypythonuz
Modul asosidagi dasturlash — bu dastur kodini strukturalashtirish yondashuvi bo‘lib, unda funksiyalar alohida modullarga ajratiladi.
🔍 Modul dasturlashning asosiy afzalliklari:
✅ Har bir modul aniq vazifani bajaradi — bu kodni o‘qishni va tushunishni osonlashtiradi.
✅ Modullarni dasturning turli qismlarida qayta ishlatish mumkin.
✅ Har bir modulni alohida test qilish va nosozliklarni topish osonlashadi.
✅ Jamoada ishlaganda ishni bo‘lib olish va parallel rivojlantirish qulay bo‘ladi.
✅ Kodni yangilash va qo‘llab-quvvatlash soddalashadi.
📦 Modul yondashuvi — katta loyihalar uchun ayni muddao!
https://t.me/simplypythonuz
#function
Hamma IP va MAC manzillarni ro‘yxat qilib qaytaradigan klass
—->
yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/16
Hamma IP va MAC manzillarni ro‘yxat qilib qaytaradigan klass
—->
yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/16
Agar dekorator hech nima qaytarmasa, nima bo‘ladi?
Agar dekorator hech qanday qiymat qaytarmasa, quyidagilar sodir bo‘ladi:
🚫 Dekorator asl funksiyani None bilan almashtiradi.
🚫 Dekoratsiyalangan funksiyani chaqirishga uringaningizda AttributeError yuz beradi — chunki None chaqiriladigan obyekt emas.
🚫 Funksiyaning o‘zi hech qachon bajarilmaydi.
🚫 Bunday dekorator funksiyani "buzadi" — u endi ishlamay qoladi.
✅ Shuning uchun, har qanday dekorator albatta chaqiriladigan qiymatni qaytarishi kerak — bu asl funksiya bo‘lishi yoki yangi "qadoqlovchi" (wrapper) funksiya bo‘lishi mumkin.
💡 Dekoratorning vazifasi — funksiyani buzmasdan, uning xatti-harakatini o‘zgartirish!
https://t.me/simplypythonuz
Agar dekorator hech qanday qiymat qaytarmasa, quyidagilar sodir bo‘ladi:
🚫 Dekorator asl funksiyani None bilan almashtiradi.
🚫 Dekoratsiyalangan funksiyani chaqirishga uringaningizda AttributeError yuz beradi — chunki None chaqiriladigan obyekt emas.
🚫 Funksiyaning o‘zi hech qachon bajarilmaydi.
🚫 Bunday dekorator funksiyani "buzadi" — u endi ishlamay qoladi.
✅ Shuning uchun, har qanday dekorator albatta chaqiriladigan qiymatni qaytarishi kerak — bu asl funksiya bo‘lishi yoki yangi "qadoqlovchi" (wrapper) funksiya bo‘lishi mumkin.
💡 Dekoratorning vazifasi — funksiyani buzmasdan, uning xatti-harakatini o‘zgartirish!
https://t.me/simplypythonuz
#telegrambot
Yopiq telegram kanalga qo'shilish uchun so'rov yuborganlarni kanalga qo'shadigan va qo'shgan foydalanuvchisi ma'lumotlarini adminga yuboradigan bot kodi
—->
yopiq kanal: https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/18
https://t.me/simplypythonuz
Yopiq telegram kanalga qo'shilish uchun so'rov yuborganlarni kanalga qo'shadigan va qo'shgan foydalanuvchisi ma'lumotlarini adminga yuboradigan bot kodi
—->
yopiq kanal: https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/18
https://t.me/simplypythonuz
nonlocal nima?
nonlocal — bu Python dasturlash tilidagi kalit so‘z bo‘lib, ichki (nested) funksiyada tashqi, lekin global bo‘lmagan o‘zgaruvchiga murojaat qilish va uni o‘zgartirish uchun ishlatiladi.
📌 Qachon kerak bo‘ladi?
Agar siz ichki funksiyada tashqi funksiyadagi o‘zgaruvchini o‘zgartirmoqchi bo‘lsangiz, oddiy = orqali bu ishni qilolmaysiz — chunki bu holda Python yangi lokal o‘zgaruvchi deb qabul qiladi.
Shuning uchun nonlocal ishlatiladi.
🔍 Misol:
🖨 Natija:
Agar nonlocal o‘rniga oddiy x += 1 yozilganida, UnboundLocalError yoki noto‘g‘ri natija chiqardi — chunki x ni lokal deb qabul qilinardi.
✅ Xulosa:
• nonlocal — bu funksiya ichidagi funksiyada tashqi lokal o‘zgaruvchiga kirish va uni o‘zgartirish imkonini beradi.
• U global emas, lokal ichki kontekst uchun ishlaydi.
• Asosan closure (zamykaniye) kabi konstruktsiyalarda qo‘llanadi.
https://t.me/simplypythonuz
nonlocal — bu Python dasturlash tilidagi kalit so‘z bo‘lib, ichki (nested) funksiyada tashqi, lekin global bo‘lmagan o‘zgaruvchiga murojaat qilish va uni o‘zgartirish uchun ishlatiladi.
📌 Qachon kerak bo‘ladi?
Agar siz ichki funksiyada tashqi funksiyadagi o‘zgaruvchini o‘zgartirmoqchi bo‘lsangiz, oddiy = orqali bu ishni qilolmaysiz — chunki bu holda Python yangi lokal o‘zgaruvchi deb qabul qiladi.
Shuning uchun nonlocal ishlatiladi.
🔍 Misol:
def tashqi():
x = 10
def ichki():
nonlocal x
x += 1
print("Ichki:", x)
ichki()
print("Tashqi:", x)
tashqi()
🖨 Natija:
Ichki: 11
Tashqi: 11
Agar nonlocal o‘rniga oddiy x += 1 yozilganida, UnboundLocalError yoki noto‘g‘ri natija chiqardi — chunki x ni lokal deb qabul qilinardi.
✅ Xulosa:
• nonlocal — bu funksiya ichidagi funksiyada tashqi lokal o‘zgaruvchiga kirish va uni o‘zgartirish imkonini beradi.
• U global emas, lokal ichki kontekst uchun ishlaydi.
• Asosan closure (zamykaniye) kabi konstruktsiyalarda qo‘llanadi.
https://t.me/simplypythonuz
Zamykaniye (closure) — funksiyada holatni eslab qolish mexanizmi
Zamykaniye — bu ichki funksiya bo‘lib, u tashqi funksiyadagi o‘zgaruvchilarga ularning ko‘rinish doirasidan tashqarida bo‘lsa ham murojaat qila oladi.
🔑 Muhim jihati shundaki, zamykaniye qiymatlarni emas, balki o‘zgaruvchining o‘ziga bo‘lgan havolani (reference) eslab qoladi. Bu esa, ularni so‘nggi holati bilan ishlatishga imkon beradi.
📌 Zamykaniye qachon kerak bo‘ladi?
— Funktsiyada doimiy holatni saqlab turish kerak bo‘lsa.
— Global o‘zgaruvchilarsiz kod yozmoqchi bo‘lsangiz.
— Yangi funksiya yaratish uchun funksiya ichida funksiyadan foydalanish zarur bo‘lsa.
🧠 Python’da zamykaniye oddiy ko‘rinishda ishlaydi:
Bu yerda increment() funksiyasi son o‘zgaruvchisini eslab qolgan — mana bu zamykaniye!
💡 Kichik, ammo kuchli konsepsiya — kodingizni toza, moslashuvchan va kapsullangan qiladi.
Zamykaniye — bu ichki funksiya bo‘lib, u tashqi funksiyadagi o‘zgaruvchilarga ularning ko‘rinish doirasidan tashqarida bo‘lsa ham murojaat qila oladi.
🔑 Muhim jihati shundaki, zamykaniye qiymatlarni emas, balki o‘zgaruvchining o‘ziga bo‘lgan havolani (reference) eslab qoladi. Bu esa, ularni so‘nggi holati bilan ishlatishga imkon beradi.
📌 Zamykaniye qachon kerak bo‘ladi?
— Funktsiyada doimiy holatni saqlab turish kerak bo‘lsa.
— Global o‘zgaruvchilarsiz kod yozmoqchi bo‘lsangiz.
— Yangi funksiya yaratish uchun funksiya ichida funksiyadan foydalanish zarur bo‘lsa.
🧠 Python’da zamykaniye oddiy ko‘rinishda ishlaydi:
def counter():
son = 0
def increment():
nonlocal son
son += 1
return son
return increment
hisobla = counter()
print(hisobla()) # 1
print(hisobla()) # 2
Bu yerda increment() funksiyasi son o‘zgaruvchisini eslab qolgan — mana bu zamykaniye!
💡 Kichik, ammo kuchli konsepsiya — kodingizni toza, moslashuvchan va kapsullangan qiladi.
Faqat nomlangan argumentlarni (kwargs) qabul qiluvchi funksiyalar haqida
Python’da **kwargs — bu funksiyaga istalgan miqdorda nomlangan argumentlarni uzatish usuli.
🔹 **kwargs funksiyada oxirgi parametr sifatida yoziladi.
🔹 Unga uzatilgan argumentlar kalit-qiymat (key-value) juftliklari shaklida dict (lug‘at) ga aylanadi.
🔹 Bu funksiyaga qo‘shimcha, dinamik parametrlar yuborish uchun juda qulay.
📌 Misol:
🧠 Agar siz *args (pozitsion argumentlar) va **kwargs ni birga ishlatsangiz — *args doim birinchi bo‘lib ko‘rsatiladi:
🎯 **kwargs — funksiyani moslashuvchan, kengaytiriladigan va universal qilish uchun qudratli vosita!
https://t.me/simplypythonuz
Python’da **kwargs — bu funksiyaga istalgan miqdorda nomlangan argumentlarni uzatish usuli.
🔹 **kwargs funksiyada oxirgi parametr sifatida yoziladi.
🔹 Unga uzatilgan argumentlar kalit-qiymat (key-value) juftliklari shaklida dict (lug‘at) ga aylanadi.
🔹 Bu funksiyaga qo‘shimcha, dinamik parametrlar yuborish uchun juda qulay.
📌 Misol:
def salom_ber(**kwargs):
for kalit, qiymat in kwargs.items():
print(f"{kalit} = {qiymat}")
salom_ber(ism='Ali', yosh=25, til='Python')
# chiqadi: ism = Ali, yosh = 25, til = Python
🧠 Agar siz *args (pozitsion argumentlar) va **kwargs ni birga ishlatsangiz — *args doim birinchi bo‘lib ko‘rsatiladi:
def funk(a, *args, **kwargs):
pass
🎯 **kwargs — funksiyani moslashuvchan, kengaytiriladigan va universal qilish uchun qudratli vosita!
https://t.me/simplypythonuz
slots atributi — xotira tejamkor va qat’iy klasslar uchun vosita
Python’dagi slots — bu klass obyektlarida faqat oldindan belgilangan atributlarga ruxsat berish imkonini beruvchi maxsus atributdir.
🔐 Nega slots kerak?
✅ Klass obyektlariga yangi atributlar yaratishga ruxsat bermaydi — faqat slots ro‘yxatida ko‘rsatilganlar bo‘ladi.
✅ Har bir obyekt uchun alohida dict yaratilmaydi → bu esa xotiradan tejamkor foydalanish degani.
✅ Katta miqdordagi oddiy obyektlar bilan ishlaganda samaradorlikni oshiradi.
📌 Misol:
⚠️ Eslatma:
— slots meros bo‘lmaydi, har bir voris klassda alohida aniqlanishi kerak.
— Dinamik atribut qo‘shish kerak bo‘lgan holatlarda slots ishlatilmaydi.
🧠 Tavsiya qilinadi: slots ni oddiy, o‘zgarmas (immutable) klasslar va ko‘p obyekt yaratiladigan tizimlarda ishlating.
https://t.me/simplypythonuz
Python’dagi slots — bu klass obyektlarida faqat oldindan belgilangan atributlarga ruxsat berish imkonini beruvchi maxsus atributdir.
🔐 Nega slots kerak?
✅ Klass obyektlariga yangi atributlar yaratishga ruxsat bermaydi — faqat slots ro‘yxatida ko‘rsatilganlar bo‘ladi.
✅ Har bir obyekt uchun alohida dict yaratilmaydi → bu esa xotiradan tejamkor foydalanish degani.
✅ Katta miqdordagi oddiy obyektlar bilan ishlaganda samaradorlikni oshiradi.
📌 Misol:
class Foydalanuvchi:
__slots__ = ['ism', 'yosh']
def __init__(self, ism, yosh):
self.ism = ism
self.yosh = yosh
f = Foydalanuvchi('Ali', 25)
f.email = 'ali@gmail.com' # ❌ AttributeError: 'Foydalanuvchi' object has no attribute 'email'
⚠️ Eslatma:
— slots meros bo‘lmaydi, har bir voris klassda alohida aniqlanishi kerak.
— Dinamik atribut qo‘shish kerak bo‘lgan holatlarda slots ishlatilmaydi.
🧠 Tavsiya qilinadi: slots ni oddiy, o‘zgarmas (immutable) klasslar va ko‘p obyekt yaratiladigan tizimlarda ishlating.
https://t.me/simplypythonuz
Python modullarni qanday qidiradi?
Python’da modul import qilinayotganda, interpreter ma’lum bir tartib bo‘yicha uni qidiradi:
🔍 Modulni qidirish algoritmi:
1️⃣ Avvalo ichki (built-in) modullar tekshiriladi — ya’ni Python’ning o‘zida mavjud bo‘lgan modullar (math, sys, time va h.k.).
2️⃣ So‘ngra sys.path ro‘yxatidagi kataloglar navbatma-navbat ko‘rib chiqiladi:
🔹 Joriy skript joylashgan papka
🔹 PYTHONPATH atrof-muhit o‘zgaruvchisi orqali berilgan kataloglar
🔹 Python'ning standart kutubxonalar kataloglari
3️⃣ Agar modul yuqoridagilarning hech birida topilmasa — ImportError istisnosi yuz beradi.
💡 sys.path’ga yangi yo‘l qo‘shib, siz qo‘shimcha kataloglardan modul import qilishingiz mumkin.
https://t.me/simplypythonuz
Python’da modul import qilinayotganda, interpreter ma’lum bir tartib bo‘yicha uni qidiradi:
🔍 Modulni qidirish algoritmi:
1️⃣ Avvalo ichki (built-in) modullar tekshiriladi — ya’ni Python’ning o‘zida mavjud bo‘lgan modullar (math, sys, time va h.k.).
2️⃣ So‘ngra sys.path ro‘yxatidagi kataloglar navbatma-navbat ko‘rib chiqiladi:
🔹 Joriy skript joylashgan papka
🔹 PYTHONPATH atrof-muhit o‘zgaruvchisi orqali berilgan kataloglar
🔹 Python'ning standart kutubxonalar kataloglari
3️⃣ Agar modul yuqoridagilarning hech birida topilmasa — ImportError istisnosi yuz beradi.
import sys
print(sys.path) # Python modul qidirayotgan yo‘llarni ko‘rsatadi
💡 sys.path’ga yangi yo‘l qo‘shib, siz qo‘shimcha kataloglardan modul import qilishingiz mumkin.
import sys
sys.path.append('/path/to/your/modules')
https://t.me/simplypythonuz