aidoc.uz

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.
▶ Video dars· Programming with Mosh· 1:00:06· ingliz tilida
Python for Beginners - Learn Coding with Python in 1 Hour

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.

YouTube'da ochish ↗

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:

XususiyatMa'nosiAmaliyotda nima beradi
Yuqori darajaliXotira, registrlar, ko'rsatkichlar (pointer) bilan o'zingiz ishlamaysizKam kod bilan ko'p ish — g'oyaga e'tibor qaratasiz
Dinamik tiplanganO'zgaruvchining tipi kod ishlayotganda aniqlanadiTez prototip, lekin tip xatolari faqat runtime'da chiqadi (15-bobda buni typing bilan yopamiz)
Interpretatsiya qilinadiganKod oldindan mashina kodiga kompilyatsiya qilinmaydiTez sinab ko'rish (REPL, Jupyter), lekin sof Python sekinroq
Umumiy maqsadliVeb, skript, ma'lumotlar, ML, avtomatlashtirishBitta 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:

  1. 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.
  2. "Yelim til" (glue language). Og'ir hisob-kitoblar C, C++, CUDA'da yozilgan kutubxonalarda bajariladi, Python esa ularni boshqaradi. NumPy'da a @ b deb yozasiz — matritsa ko'paytmasi optimallashtirilgan C/Fortran kodida (BLAS) bajariladi. Python faqat "buyruq beradi".
  3. 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.
  4. Jupyter. Kodni bo'laklab ishlatib, natijani darhol ko'rish — tajriba o'tkazish uchun ideal muhit.
Sizning kodingiz (Python)
model = Model(); model.fit(X, y); answer = client.messages.create(...)
siz shu yerdasiz
Kutubxonalar API'si (Python)
PyTorch, NumPy, Pandas, scikit-learn, Anthropic SDK
Og'ir hisob-kitob (C / C++ / CUDA / Rust)
BLAS, cuDNN, Arrow — tezlik shu yerdan keladi
Apparat (CPU / GPU)
Python bu qatlamni bevosita ko'rmaydi

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:

salom.py
Siz yozgan manba kod
Kompilyator
Kod → AST → bytecode
Bytecode (.pyc)
__pycache__ papkasida keshlanadi
Python Virtual Machine
Bytecode'ni buyruqma-buyruq 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#

ImplementatsiyaNima uchun
CPythonRasmiy, standart. Kursda shuni ishlatamiz
PyPyJIT kompilyator bilan sof Python kodini tezlashtiradi
MicroPythonMikrokontrollerlar uchun
Jython, IronPythonJVM 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.

  1. uv'ni o'rnating

    macOS / Linux:

    curl -LsSf https://astral.sh/uv/install.sh | sh

    Windows (PowerShell):

    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  2. Python'ni o'rnating

    uv python install 3.13

    uv Python'ni o'zining papkasiga o'rnatadi va tizimdagi Python'ga tegmaydi.

  3. Loyiha yarating

    uv init python-kurs
    cd python-kurs
    uv run main.py

    uv init sizga pyproject.toml (loyiha tavsifi), main.py va .python-version fayllarini yaratadi. uv run birinchi marta ishlaganda avtomatik .venv virtual muhitini yaratadi.

  4. Kutubxona qo'shing

    uv add numpy pandas

    Bu kutubxonalarni faqat shu loyihaning .venv papkasiga o'rnatadi va pyproject.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 — .ipynb daftarlari 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):

terminal
uv run python
Python 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 metodlari

Python 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()
terminal
uv run main.py
Ismingiz nima? Aziz Assalomu alaykum, Aziz! Python dunyosiga xush kelibsiz.

Bu kichik dasturda ko'p narsa bor — hammasini keyingi boblarda chuqur ochamiz, hozircha qisqacha:

1
"""...""" — docstring
Modul yoki funksiya hujjati. help() shu matnni ko'rsatadi
2
def — funksiya ta'rifi
Qayta ishlatiladigan kod bloki (8-bob)
3
ism: str — type hint
Parametr tipi haqida izoh — Python tekshirmaydi, lekin muharrir va mypy tekshiradi (15-bob)
4
f"...{ism}" — f-string
Matn ichiga qiymat qo'yish (3-bob)
5
if __name__ == "__main__" — kirish nuqtasi
Fayl 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 tashqarida

Standart — 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:

NimaQoidaMisol
O'zgaruvchi, funksiyasnake_caseuser_name, hisobla_narx()
KlassPascalCaseUserProfile, DataLoader
KonstantaUPPER_CASEMAX_TOKENS = 4096
"Ichki" nom_ bilan boshlanadi_cache, _yordamchi()
Chekinish4 bo'sh joy—
Qator uzunligi79–88 belgi (ruff/black standarti 88)—
Operatorlar atrofibo'sh joyx = 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 zero
  1. Oxirgi qatorni o'qing

    ZeroDivisionError: division by zero — nima bo'ldi: nolga bo'lish.

  2. Undan yuqoridagi qatorni o'qing

    main.py, 2-qator, bol funksiyasi ichida — qayerda bo'ldi. ~~^~~ belgisi aynan qaysi amal ekanini ko'rsatadi.

  3. 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#

1–2-qism: Poydevor
Obyektlar, tiplar, satrlar, oqim, to'plamlar, funksiyalar — hamma narsaning asosi
3-qism: Professional Python
Modullar, xatolar, fayllar, OOP, dekoratorlar, typing, testlar, async
4-qism: Ma'lumotlar
NumPy, Pandas, vizualizatsiya, Jupyter, scikit-learn
5-qism: AI muhandisi uchun
LLM API, FastAPI servis, performans, yo'l xaritasi
  • 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#

XatoBelgisiYechim
Tizim Python'iga kutubxona o'rnatishexternally-managed-environment xatosi yoki loyihalar to'qnashuviHar loyiha uchun .venv (uv init / uv add)
VS Code noto'g'ri interpreter'ni ishlatadiModuleNotFoundError: No module named 'numpy', garchi o'rnatgan bo'lsangiz ham"Python: Select Interpreter" → .venv
Tab va bo'sh joy aralashTabError yoki IndentationErrorMuharrirni 4 bo'sh joyga sozlang, Ruff bilan formatlang
Faylni numpy.py yoki random.py deb nomlashAttributeError: module 'numpy' has no attribute 'array'Fayllaringizni standart modul nomlari bilan atamang
python vs python3macOS/Linux'da python topilmaydiuv run python yoki python3
Amaliy topshiriq

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.

Amaliy topshiriq

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 b
Maslahatni ko'rsatish

dis.dis() ga funksiyani bering. Shart uchun POP_JUMP_IF_FALSE kabi buyruqqa e'tibor bering.

Amaliy topshiriq

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.

Amaliy topshiriq

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.)

Yodda saqlang
  • 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.

Test: topshirilmaganMasalalar: 0/3

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.