1-qism · Poydevor·01-bob
Python'ga kirish: nega aynan Python va u qanday ishlaydi
Python nima, nega AI va ML dunyosi uni tanlagan, kodingiz kompyuterda qanday bajariladi, muhitni professional tarzda o'rnatish va birinchi dastur.
Agar siz AI Engineering yoki ML Engineering bilan shug'ullanmoqchi bo'lsangiz, Python — bu shunchaki "yana bitta til" emas. Bu sohaning umumiy tili: modellar Python'da o'qitiladi (PyTorch, JAX), ma'lumotlar Python'da tozalanadi (Pandas, Polars), LLM'lar bilan Python'da gaplashiladi (Anthropic, OpenAI SDK'lari), servislar Python'da yoziladi (FastAPI). Bu kursning maqsadi — sizni shu ekotizimga tayyor holda olib kirish: sintaksisni yodlash emas, tilning qanday fikrlashini tushunish.
Bu bobda biz quyidagilarni ko'ramiz:
- Python nima va nega u AI/ML'da yetakchi;
- siz yozgan kod kompyuterda qanday bajariladi (bu keyinchalik ko'p savollarga javob beradi);
- muhitni professional tarzda o'rnatish (
uv, VS Code); - birinchi dastur va kodni yozish uslubi (PEP 8);
- bu kursdan qanday qilib maksimal foyda olish.
Python sintaksisiga bir soatlik amaliy kirish: o'zgaruvchilar, shartlar, sikllar, funksiyalar. Bob nazariyasini (Python qanday ishlaydi, muhit) o'qib bo'lgach ko'ring — videodagi kodlarni o'zingiz yozib boring.
1. Python nima?#
Python — 1991-yilda Guido van Rossum tomonidan yaratilgan, yuqori darajali, dinamik tiplangan, interpretatsiya qilinadigan umumiy maqsadli dasturlash tili. Har bir so'zni ochib chiqaylik, chunki ularning har biri sizga keyinroq ta'sir qiladi:
| Xususiyat | Ma'nosi | Amaliyotda nima beradi |
|---|---|---|
| Yuqori darajali | Xotira, registrlar, ko'rsatkichlar (pointer) bilan o'zingiz ishlamaysiz | Kam kod bilan ko'p ish — g'oyaga e'tibor qaratasiz |
| Dinamik tiplangan | O'zgaruvchining tipi kod ishlayotganda aniqlanadi | Tez prototip, lekin tip xatolari faqat runtime'da chiqadi (15-bobda buni typing bilan yopamiz) |
| Interpretatsiya qilinadigan | Kod oldindan mashina kodiga kompilyatsiya qilinmaydi | Tez sinab ko'rish (REPL, Jupyter), lekin sof Python sekinroq |
| Umumiy maqsadli | Veb, skript, ma'lumotlar, ML, avtomatlashtirish | Bitta til bilan butun pipeline'ni yozasiz |
Nega AI va ML aynan Python'ni tanladi?#
Bu tasodif emas va "Python tez" degani ham emas — aslida sof Python ancha sekin. Sabablar boshqa:
- O'qilishi oson. Ilmiy tadqiqotchilar dasturchi emas — ular uchun kod
formulaga o'xshab o'qilishi muhim.
loss = (y_pred - y_true) ** 2— bu deyarli matematika. - "Yelim til" (glue language). Og'ir hisob-kitoblar C, C++, CUDA'da
yozilgan kutubxonalarda bajariladi, Python esa ularni boshqaradi. NumPy'da
a @ bdeb yozasiz — matritsa ko'paytmasi optimallashtirilgan C/Fortran kodida (BLAS) bajariladi. Python faqat "buyruq beradi". - Ekotizim. NumPy (2006), scikit-learn (2007), Pandas (2008), TensorFlow (2015), PyTorch (2016), Hugging Face Transformers (2018) — hammasi Python uchun. Yangi model chiqsa, birinchi bo'lib Python kodi chiqadi.
- Jupyter. Kodni bo'laklab ishlatib, natijani darhol ko'rish — tajriba o'tkazish uchun ideal muhit.
Shu sababli professional AI muhandisi uchun ikki narsa muhim: Python'ning o'zini chuqur bilish (bu kursning 1–3 qismlari) va qachon sof Python'dan voz kechib, vektorlashgan kutubxonaga o'tish kerakligini his qilish (4-qism).
2. Kodingiz qanday bajariladi?#
"Python interpretatsiya qilinadigan til" degan gap aslida yarim haqiqat. Eng ko'p ishlatiladigan Python — CPython (C tilida yozilgan rasmiy implementatsiya) — kodni ikki bosqichda bajaradi:
Ya'ni Python ham kompilyatsiya qiladi — lekin mashina kodiga emas,
o'zining oraliq tili bo'lgan bytecode'ga. Keyin bu bytecode'ni
virtual mashina (PVM) — oddiy for sikli ichidagi katta switch — bitta-bitta
bajaradi. Buni o'z ko'zingiz bilan ko'rishingiz mumkin:
import dis
def qosh(a, b):
return a + b
dis.dis(qosh) 3 RESUME 0
4 LOAD_FAST_LOAD_FAST 1 (a, b)
BINARY_OP 0 (+)
RETURN_VALUE(Aniq ko'rinish Python versiyasiga qarab biroz farq qiladi.) Bu yerda muhim
narsa: a + b bitta BINARY_OP buyrug'iga aylandi. Lekin PVM bu buyruqni
bajarganda har safar "a qanday tip? b qanday tip? ularni qanday qo'shish
kerak?" deb tekshiradi — chunki Python dinamik tiplangan. Mana shu tekshiruv
sof Python sekinligining asosiy sababi. C'da a + b bitta protsessor
buyrug'i; Python'da — o'nlab.
CPython yagona emas#
| Implementatsiya | Nima uchun |
|---|---|
| CPython | Rasmiy, standart. Kursda shuni ishlatamiz |
| PyPy | JIT kompilyator bilan sof Python kodini tezlashtiradi |
| MicroPython | Mikrokontrollerlar uchun |
| Jython, IronPython | JVM va .NET ustida (amalda kam ishlatiladi) |
Python 3.13'dan boshlab CPython'da eksperimental JIT va GIL'siz (free-threaded) rejim paydo bo'ldi — 17-bobda parallellik haqida gaplashganda qaytamiz.
Python 2 va Python 3#
Internetda hali ham Python 2 kodlari uchraydi (print "salom" qavssiz).
Python 2 2020-yilda butunlay to'xtatilgan. Bu kursda faqat Python 3
(3.12 va undan yangi) ishlatiladi. Agar biror maqolada print qavssiz
yozilgan bo'lsa — u eskirgan.
3. Muhitni o'rnatish — professional yo'l#
Yangi boshlovchilar ko'pincha bitta xatoga yo'l qo'yadi: Python'ni o'rnatadi, keyin hamma kutubxonani global o'rnatadi, bir necha oydan keyin loyihalar bir-biriga xalaqit bera boshlaydi ("bu loyihaga numpy 1.x kerak, unisiga 2.x"). Biz boshidanoq to'g'ri yo'ldan boramiz.
uv — zamonaviy Python boshqaruvchisi#
uv — Rust'da yozilgan, juda tez vosita: Python versiyalarini o'rnatadi,
virtual muhit yaratadi, paketlarni boshqaradi. U pip, venv, pyenv,
pip-tools vazifalarini birlashtiradi. 2024–2025 yillardan beri sanoatda
standartga aylanib bormoqda.
uv'ni o'rnating
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Python'ni o'rnating
uv python install 3.13uv Python'ni o'zining papkasiga o'rnatadi va tizimdagi Python'ga tegmaydi.
Loyiha yarating
uv init python-kurs cd python-kurs uv run main.pyuv initsizgapyproject.toml(loyiha tavsifi),main.pyva.python-versionfayllarini yaratadi.uv runbirinchi marta ishlaganda avtomatik.venvvirtual muhitini yaratadi.Kutubxona qo'shing
uv add numpy pandasBu kutubxonalarni faqat shu loyihaning
.venvpapkasiga o'rnatadi vapyproject.tomlga yozib qo'yadi. Boshqa loyihalar ta'sirlanmaydi.
Muharrir: VS Code (yoki PyCharm)#
VS Code'ga quyidagi kengaytmalarni o'rnating:
- Python (Microsoft) — ishga tushirish, debugger;
- Pylance — avtomatik to'ldirish va tip tekshiruvi;
- Ruff — linter va formatter (16-bobda batafsil);
- Jupyter —
.ipynbdaftarlari uchun (22-bob).
Ctrl+Shift+P → "Python: Select Interpreter" orqali loyihaning .venv
ichidagi Python'ni tanlang. Bu juda muhim qadam: tanlanmasa, VS Code
o'rnatgan kutubxonalaringizni "ko'rmaydi".
4. REPL — Python bilan suhbat#
Terminalda python (yoki uv run python) deb yozsangiz, REPL ochiladi
(Read–Eval–Print Loop: o'qi, hisobla, chiqar, takrorla):
uv run pythonPython 3.13.1 (main, Dec 3 2024) [Clang 16.0.0] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 2 ** 100 1267650600228229401496703205376 >>> len("Toshkent") 8 >>> exit()
REPL — eng yaxshi o'rganish vositasi. Bu kurs davomida har bir yangi tushunchani REPL'da sinab ko'ring. Kitobni o'qish bilan kodni o'zingiz yozish orasidagi farq — velosiped haqida o'qish bilan velosiped haydash orasidagi farqdek.
Ikki foydali yordamchi:
>>> help(str.split) # funksiya hujjatini ko'rsatadi
>>> dir("salom") # obyektning barcha atribut va metodlariPython 3.13'dan boshlab REPL ancha qulaylashdi: rangli chiqish, ko'p qatorli
tahrirlash, exit qavssiz ishlaydi. Yanada qulay variant — IPython
(uv add --dev ipython, keyin uv run ipython).
5. Birinchi dastur#
main.py faylini oching va quyidagini yozing:
"""Birinchi dastur: foydalanuvchi bilan salomlashadi."""
def salomlash(ism: str) -> str:
"""Ism bo'yicha salomlashish matnini qaytaradi."""
return f"Assalomu alaykum, {ism}! Python dunyosiga xush kelibsiz."
def main() -> None:
ism = input("Ismingiz nima? ").strip()
if not ism:
ism = "do'stim"
print(salomlash(ism))
if __name__ == "__main__":
main()uv run main.pyIsmingiz nima? Aziz Assalomu alaykum, Aziz! Python dunyosiga xush kelibsiz.
Bu kichik dasturda ko'p narsa bor — hammasini keyingi boblarda chuqur ochamiz, hozircha qisqacha:
- 1
- """...""" — docstringModul yoki funksiya hujjati. help() shu matnni ko'rsatadi
- 2
- def — funksiya ta'rifiQayta ishlatiladigan kod bloki (8-bob)
- 3
- ism: str — type hintParametr tipi haqida izoh — Python tekshirmaydi, lekin muharrir va mypy tekshiradi (15-bob)
- 4
- f"...{ism}" — f-stringMatn ichiga qiymat qo'yish (3-bob)
- 5
- if __name__ == "__main__" — kirish nuqtasiFayl to'g'ridan-to'g'ri ishga tushirilganda main() chaqiriladi, import qilinganda — yo'q (9-bob)
Chekinish (indentation) — sintaksisning bir qismi#
Python'da bloklar {} bilan emas, chekinish bilan belgilanadi. Bu
uslub masalasi emas — bu sintaksis:
if 5 > 3:
print("katta") # if blokining ichida
print("haqiqatan") # bu ham ichida
print("tugadi") # blokdan tashqaridaStandart — 4 ta bo'sh joy (tab emas). Tab va bo'sh joyni aralashtirsangiz,
TabError olasiz. Muharriringiz Tab tugmasini 4 bo'sh joyga aylantirishi
kerak (VS Code buni Python fayllar uchun avtomatik qiladi).
6. Uslub: PEP 8 va "Python Zen"#
PEP (Python Enhancement Proposal) — til haqidagi rasmiy hujjatlar. PEP 8 — kod yozish uslubi bo'yicha qo'llanma. Asosiy qoidalar:
| Nima | Qoida | Misol |
|---|---|---|
| O'zgaruvchi, funksiya | snake_case | user_name, hisobla_narx() |
| Klass | PascalCase | UserProfile, DataLoader |
| Konstanta | UPPER_CASE | MAX_TOKENS = 4096 |
| "Ichki" nom | _ bilan boshlanadi | _cache, _yordamchi() |
| Chekinish | 4 bo'sh joy | — |
| Qator uzunligi | 79–88 belgi (ruff/black standarti 88) | — |
| Operatorlar atrofi | bo'sh joy | x = a + b, lekin f(a=1) |
Bularni yodlash shart emas — Ruff formatter ularni avtomatik qo'llaydi.
Lekin nomlash qoidalarini bilish kerak, chunki ular ma'no tashiydi:
DataLoader — klass, data_loader — obyekt, DATA_DIR — o'zgarmas.
REPL'da import this deb yozing — "The Zen of Python", tilning falsafasi:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...
Readability counts.
...
There should be one-- and preferably only one --obvious way to do it.Eng muhimi — "Readability counts" (o'qilishi muhim). Kod bir marta yoziladi, lekin o'nlab marta o'qiladi. Bu kursdagi barcha misollar shu tamoyilga amal qiladi.
O'zbekcha yoki inglizcha nomlar?#
Bu kursda tushunish oson bo'lishi uchun ba'zi misollarda o'zbekcha nomlar
ishlatamiz (salomlash, narx). Real loyihalarda esa nomlarni ingliz
tilida yozing — sababi oddiy: kutubxonalar, hujjatlar, jamoadoshlar,
Stack Overflow, AI yordamchilar — hammasi ingliz tilida. Izohlar (comment)
esa jamoangiz tilida bo'lishi mumkin.
7. Xatolarni o'qishni o'rganing#
Python xato bo'lsa, traceback chiqaradi. Yangi boshlovchilar uni qo'rqib yopib qo'yadi — professional esa pastdan yuqoriga o'qiydi:
def bol(a, b):
return a / b
natija = bol(10, 0)Traceback (most recent call last):
File "main.py", line 4, in <module>
natija = bol(10, 0)
File "main.py", line 2, in bol
return a / b
~~^~~
ZeroDivisionError: division by zeroOxirgi qatorni o'qing
ZeroDivisionError: division by zero— nima bo'ldi: nolga bo'lish.Undan yuqoridagi qatorni o'qing
main.py, 2-qator,bolfunksiyasi ichida — qayerda bo'ldi.~~^~~belgisi aynan qaysi amal ekanini ko'rsatadi.Zanjirni yuqoriga kuzating
4-qatorda
bol(10, 0)chaqirilgan — kim chaqirdi. Ko'pincha xato sababi shu yerda (noto'g'ri argument).
10-bobda xatolar bilan ishlashni to'liq o'rganamiz. Hozircha qoida: xato xabarini to'liq o'qimasdan Google'ga yoki AI'ga yugurmang — 80% hollarda javob xabarning o'zida.
8. Python'da yozilgan kod — AI muhandisi kundaligidan#
Kurs oxirida nimaga erishishingizni his qilish uchun — mana real ishda uchraydigan kod. Hozir hammasini tushunishingiz shart emas; 25-bobga kelib bu kodning har bir qatori sizga tanish bo'ladi:
import asyncio
from pathlib import Path
import pandas as pd
from anthropic import AsyncAnthropic
from pydantic import BaseModel
class Review(BaseModel):
text: str
sentiment: str | None = None
client = AsyncAnthropic()
async def classify(review: Review, limit: asyncio.Semaphore) -> Review:
async with limit: # bir vaqtda ko'pi bilan N ta so'rov
msg = await client.messages.create(
model="claude-opus-5-5",
max_tokens=10,
messages=[{"role": "user", "content": f"positive/negative/neutral? {review.text}"}],
)
review.sentiment = msg.content[0].text.strip().lower()
return review
async def main() -> None:
df = pd.read_csv(Path("data") / "reviews.csv")
reviews = [Review(text=t) for t in df["text"].dropna()]
limit = asyncio.Semaphore(5)
results = await asyncio.gather(*(classify(r, limit) for r in reviews))
pd.DataFrame([r.model_dump() for r in results]).to_csv("labeled.csv", index=False)
asyncio.run(main())Bu yerda: modullar (9-bob), fayl yo'llari (11-bob), klasslar va Pydantic (12, 15-boblar), async parallellik (17-bob), Pandas (20-bob), LLM API (23-bob). Ko'ryapsizmi — AI muhandisligi "model chaqirish"dan ko'ra ko'proq yaxshi Python haqida.
9. Bu kursdan qanday foydalanish kerak#
- Har bir kod misolini o'zingiz yozing (nusxa ko'chirmang). Barmoqlar ham o'rganadi.
- Mashqlarni tashlab ketmang. Har bob oxiridagi mashqlar — bobning eng muhim qismi.
- Tushunmagan joyni so'rang — lekin tekshiring. AI yordamchi tushuntirib berishi mumkin, ammo har bir javobni REPL'da o'zingiz sinab ko'ring.
- 1–2-qismni tez o'tib ketmang. ML kodidagi xatolarning katta qismi "murakkab" narsalardan emas, oddiy narsalardan keladi: o'zgaruvchan (mutable) obyektni nusxa deb o'ylash, butun songa bo'lish, iteratorning bir marta tugashi.
Keng tarqalgan boshlang'ich xatolar#
| Xato | Belgisi | Yechim |
|---|---|---|
| Tizim Python'iga kutubxona o'rnatish | externally-managed-environment xatosi yoki loyihalar to'qnashuvi | Har loyiha uchun .venv (uv init / uv add) |
| VS Code noto'g'ri interpreter'ni ishlatadi | ModuleNotFoundError: No module named 'numpy', garchi o'rnatgan bo'lsangiz ham | "Python: Select Interpreter" → .venv |
| Tab va bo'sh joy aralash | TabError yoki IndentationError | Muharrirni 4 bo'sh joyga sozlang, Ruff bilan formatlang |
Faylni numpy.py yoki random.py deb nomlash | AttributeError: module 'numpy' has no attribute 'array' | Fayllaringizni standart modul nomlari bilan atamang |
python vs python3 | macOS/Linux'da python topilmaydi | uv run python yoki python3 |
1. Muhitni sozlang
uv yordamida python-kurs loyihasini yarating, unga numpy qo'shing va
quyidagi kodni main.pyga yozib ishga tushiring:
import sys
import numpy as np
print(sys.version)
print(sys.executable)
print(np.__version__)sys.executable qaysi papkani ko'rsatyapti? Nega bu .venv ichida ekani muhim?
Maslahatni ko'rsatish
uv init, uv add, uv run — uchta buyruq yetadi.
2. Bytecode'ni ko'ring
Quyidagi funksiyaning bytecode'ini dis bilan chiqaring va har bir
buyruq nima qilishini taxmin qiling:
def maksimum(a, b):
if a > b:
return a
return bMaslahatni ko'rsatish
dis.dis() ga funksiyani bering. Shart uchun POP_JUMP_IF_FALSE kabi buyruqqa e'tibor bering.
3. Traceback o'qish
Quyidagi kodni ishga tushiring, traceback'ni pastdan yuqoriga o'qing va qaysi qatorda, nima uchun xato bo'lganini o'z so'zlaringiz bilan yozing:
def yosh_hisobla(matn):
return 2026 - int(matn)
yillar = ["1995", "2001", "yigirma"]
for y in yillar:
print(yosh_hisobla(y))Maslahatni ko'rsatish
int('yigirma') — matnni songa aylantirib bo'lmaydi. Xato turi ValueError.
4. Salomlashuvchi dasturni kengaytiring
Birinchi dasturni shunday o'zgartiring: foydalanuvchidan ism va tug'ilgan
yilni so'rasin, yoshini hisoblab chiqarsin. Agar yil raqam bo'lmasa —
dastur yiqilmasin, "Yilni raqam bilan kiriting" desin. (Maslahat:
str.isdigit() metodini sinab ko'ring.)
- 01Python — yuqori darajali, dinamik tiplangan, interpretatsiya qilinadigan til; AI/ML'da u og'ir C/CUDA kutubxonalarini boshqaruvchi 'yelim til'.
- 02CPython kodni bytecode'ga kompilyatsiya qiladi va virtual mashinada bajaradi; har amalda tip tekshiruvi — sof Python sekinligining sababi.
- 03Har loyiha uchun alohida virtual muhit: uv init, uv add, uv run.
- 04Chekinish — sintaksis: 4 bo'sh joy. Nomlash: snake_case, PascalCase, UPPER_CASE.
- 05Traceback pastdan yuqoriga o'qiladi: nima → qayerda → kim chaqirdi.
- 06Real loyihalarda nomlar ingliz tilida bo'lsin.
Mustahkamlash
Test va amaliy masalalar
Avval testni ishlang — har javobdan keyin izoh chiqadi. Keyin masalalarni shu yerning o'zida yechib, brauzerdagi haqiqiy Python bilan avtomatik tekshiring. Natijalaringiz kurs progressi sahifasida jamlanadi.
Bilimni tekshirish
Bob bo'yicha test
12 ta savol · har javobdan keyin to'g'ri yoki xatoligi va izoh ko'rsatiladi · oxirida natija foizda.
Amaliy masalalar
Kodni yozing va «Tekshirish»ni bosing (yoki Ctrl/⌘ + Enter). Kodingiz shu brauzerda saqlanib turadi.
01Salomlashuvchi funksiya
salomlash(ism) funksiyasini yozing. U quyidagi satrni qaytarsin (print emas, return):
Assalomu alaykum, <ism>!
Agar ism bo'sh satr yoki faqat bo'sh joylardan iborat bo'lsa, "do'stim" so'zi ishlatilsin. Ism chetidagi bo'sh joylar olib tashlansin.
02Yoshni hisoblash
yosh(tugilgan_yil, joriy_yil=2026) funksiyasini yozing: yoshni butun son sifatida qaytarsin. Agar tug'ilgan yil joriy yildan katta bo'lsa — ValueError ko'tarsin.
03Juft sonlar yig'indisi
juftlar_yigindisi(n) funksiyasi 1 dan n gacha (n ham kiradi) bo'lgan juft sonlar yig'indisini qaytarsin. Masalan, juftlar_yigindisi(10) → 2 + 4 + 6 + 8 + 10 = 30.