Курс по Python — от нула до програма, която проверява много услуги едновременно
Езици и бекендНачално ниво
От Dorian Chávez, основател на Hábil и архитект на интеграции. Така обучаваме тези, които изграждат системи, които не могат да се провалят.
За кого е: за този, който никога не е програмирал, или е копирал скриптове, които работят, без да знае защо. Не се предполага нищо: нито че имаш инсталиран Python, нито че знаеш какво е виртуална среда. Всяко понятие се обяснява, когато се появи, и се обяснява защо съществува, а не само как се пише.
Какво ще умееш накрая: да напишеш цялостна програма, с тестове и няколко задачи едновременно, да разбираш това, което си написал, и да можеш да го обясниш на някой друг. И да изградиш преценка, за да четеш сам документацията на Python, което е истинското изпитание.
Къде продължава: същият проблем, revisor, е решен в нашите курсове по Go, Rust и TypeScript. Когато завършиш този, да сравниш своето решение с техните учи повече, отколкото да започнеш от нулата.
Какво ти трябва, преди да започнеш: компютър с Linux Mint и да умееш да отваряш терминал. Нищо повече. Урок 1 подготвя всичко от нулата.
Проектът, който ще изградиш
revisor: програма за команден ред, която получава списък от услуги, проверява всички едновременно и връща отчет в таблица или в JSON.
$ revisor --config servicios.toml --formato tabla
SERVICIO ESTADO TIEMPO DETALLE
catalogo ARRIBA 160ms 200
inventario LENTO 2.3s 200
pagos ARRIBA 90ms 200
reportes CAIDO — sin conexión
4 servicios · 2 arriba · 1 lento · 1 caído · promedio 852ms
Започва в урок 2 със заглавие и една-единствена услуга и расте във всеки урок, докато стане пакет, който се инсталира като всяка друга команда. Изглежда малък и не е: за да го напишеш добре, са ти нужни функции, колекции, грешки, файлове, тестове, типове, HTTP и едновременни задачи.
Дванадесетте урока
| Урок | Какво изграждаш | Какво научаваш | |
|---|---|---|---|
| 0 | Какво е Python и какво НЕ е | още нищо (четене) | интерпретатор и bytecode; динамично, но строго типизиране; анотациите не се налагат; GIL; виртуални среди; версии |
| 1 | Инсталиране на Python на твоя Linux Mint | средата и първият ти скрипт | python3 на системата; externally-managed-environment; venv; pip; REPL; първият traceback |
| 2 | Стойности, текст и решения | заглавието на revisor и класифицирането на една услуга |
три понятия: числа, низове, булеви стойности и None; f-strings; if/elif/else и отстъпите |
| 3 | Цикли, функции и модули | функцията revisar() и обхождането на списъка |
for, while; == срещу is; def; област на видимост; изменяемият аргумент по подразбиране; import; __main__ |
| 4 | Колекции | revisor без паралелни списъци: данните на всяка услуга, заедно |
list, dict, tuple, set; изрази за построяване (comprehensions); копие срещу препратка; KeyError и IndexError |
| 5 | Моделът на данните | моделът Servicio / Estado и отчетът с неговото обобщение |
dataclass; Enum; match и case |
| 6 | Грешки, файлове и данни отвън | четенето на конфигурацията | try/except; как се чете traceback; with; pathlib; UTF-8; json и tomllib; валидиране; без eval и pickle |
| 7 | Пакет с команден ред | revisor като пакет |
pyproject.toml; python -m revisor; argparse; кодове на изход (exit codes); редактируема инсталация с pip; uv като незадължителна рамка |
| 8 | Тестове, типове и качество | revisor с тестове |
pytest и таблица от случаи; tmp_path; monkeypatch; постепенно типизиране с mypy; ruff |
| 9 | HTTP и asyncio | revisor, който проверява истински |
urllib и httpx; времеви лимити (timeout); async и await; asyncio.run |
| 10 | Съвместно изпълнение с ограничения и тестове без мрежа | revisor, който работи едновременно и е тестван |
TaskGroup; timeout; Semaphore; групи от изключения; симулирана мрежа в тестовете |
| 11 | Завършената програма | пълният revisor, който се инсталира |
отчет в таблица и JSON; logging; сигурност; изграждане и инсталиране с pipx |
В края на всеки урок има упражнения с техните решения и раздел „За допълнително четене“; източниците на това, което се твърди, са свързани в текста, там където се използват. А дневникът е твой: записвай там това, което ти е костало усилие.
За по-нататъшно четене: в блога на Hábil, тестове, които хващат грешки и сигурност на API. А в курсовете: ако вече умееш да програмираш и искаш съвременна Java, виж курса по Java.
Три критерия, които минават през целия курс
Грешката е съдържание, а не злополука. Всеки урок нарочно предизвиква грешката, която ще видиш, показва истинския traceback и учи как да се чете, от последния ред нагоре. Да умееш да четеш грешка е половината от това да умееш да програмираш.
Средата е истинска. Работи се на Linux Mint с Python, който системата носи, и с нейните правила, а не в тетрадка в браузъра. Целият код работи на Python 3.14 и също на 3.12, който е този на Mint.
Тестовете и сигурността не са уроци, а навици. Данните отвън се валидират в урок 6, тестовете идват в урок 8 и един тест не се брои, докато не си го видял да се проваля, а адресът, който някой напише във файл, се третира като това, което е, в уроци 9 и 11.
Как разбираш, че си завършил
Курсът не свършва, когато си прочел урок 11, а когато твоят revisor изпълнява тези седем неща:
pytestзавършва зелено и отчетът казва колко теста са се изпълнили. Преброй ги от отчета, не от кода на изход (exit code): зелено с нула теста изглежда същото като истинско зелено.ruff checkиruff format --checkне докладват нищо, иmypyсъщо.- Проверява 20 услуги едновременно за време, близко до това на най-бавната, а не до сбора на всички. Измерваш го ти, с часовник, последователно и паралелно.
- Паднала, бавна или връщаща боклук услуга не събаря отчета: появява се на своя ред със своята грешка, а останалите излизат пълни.
- Никоя заявка не може да чака вечно: всички имат времеви лимит (timeout).
- Работи еднакво на Python 3.14 и на 3.12 от твоя Mint.
- Инсталира се с
pipx installиrevisor --helpработи от друга папка. Излиза с код 0, ако всичко работи, и с 1, ако не е така.
Уроци
- Урок 0 — Какво е Python и какво НЕ е
- Урок 1 — Инсталиране на Python на твоя Linux Mint
- Урок 2 — Стойности, текст и решения
- Урок 3 — Цикли, функции и модули
- Урок 4 — Колекции
- Урок 5 — Моделът на данните
- Урок 6 — Грешки, файлове и данни отвън
- Урок 7 — Пакет с команден ред
- Урок 8 — Тестове, типове и качество
- Урок 9 — HTTP и asyncio
- Урок 10 — Съвместно изпълнение с ограничения и тестове без мрежа
- Урок 11 — Завършената програма