01 / ПершоджерелоОфіційна документація
Головне правило: якщо джерела суперечать одне одному — правда в офіційній документації. Вона ж найшвидше оновлюється, коли в мові щось змінюється.
Є українською. Найточніше джерело — саме сюди варто йти, коли треба перевірити поведінку.
Офіційний покроковий вступ від авторів мови.
Як прийнято форматувати код. Читається за годину, економить роки суперечок.
Двадцять рядків про філософію мови. Наберіть import this.
02 / УкраїнськоюПосібники
Україномовний посібник Г. Мізюка. Ми брали з нього орієнтир для переліку й порядку тем; тексти, приклади та інтерактиви курсу написані самостійно.
03 / ДовідникиІнструменти й бібліотеки
| ресурс | для чого |
|---|---|
| Real Python | Глибокі статті англійською, часто з візуалізаціями |
| Python Tutor | Покроково показує, що відбувається в пам'яті |
| collections | namedtuple, черги, лічильники — стандартні структури поверх базових |
| dis | Дизасемблер байткоду: видно, у що насправді перетворюється рядок коду |
| TimeComplexity (Python Wiki) | Таблиця складності операцій для list, dict, set, deque |
| CPython · listobject.c | Вихідний код списку: функція list_resize і формула зростання ємності |
| CPython · listsort.txt | Опис Timsort від автора: чому він стабільний і звідки лінійний час на впорядкованих даних |
| copy | Поверхнева й глибока копія: copy.copy проти copy.deepcopy |
| Truth Value Testing | Офіційний перелік хибних значень і правило __bool__/__len__ |
| Boolean operations | Чому and і or повертають операнд, а не True/False |
| PEP 636 — підручник з match/case | Структурне зіставлення зі зразком: зразки, сторожі, захоплення імен |
| Defining Functions | Розділ підручника про def, return і те, чому функція без return віддає None |
| PEP 257 — докстрінги | Домовленості про докстрінги: що писати в першому рядку й як оформлювати багаторядкові |
| sys · межа рекурсії | Скільки кадрів вміщує стек викликів і звідки береться RecursionError |
| venv | Модуль віртуальних середовищ: структура теки, pyvenv.cfg, прапорці створення |
| PEP 668 — externally managed environments | Звідки взялася помилка externally-managed-environment і чому дистрибутиви захищають системний Python |
| pip · посібник користувача | Команди install, freeze, show і формат requirements.txt |
| Version specifiers | Точні правила для ==, >= і «сумісного релізу» ~= |
| PEP 621 — метадані в pyproject.toml | Сучасний опис проєкту й залежностей замість requirements.txt |
| pytest | Документація фреймворку тестування |
| pytest · assert | Переписування assert і те, як pytest дістає фактичні значення; pytest.raises |
| pytest · parametrize | Один тест на багато наборів даних і як формуються імена в звіті |
| pytest · фікстури | Спільна підготовка для кількох тестів, yield для прибирання, tmp_path |
| assert у довіднику мови | Що саме робить інструкція й чому python -O її прибирає |
| unittest | Тестування без сторонніх пакетів: родина методів assertEqual і компанія |
| datetime | Типи date, time, datetime, timedelta; наївні та обізнані обʼєкти; таблиця кодів strftime |
| zoneinfo | Часові пояси зі стандартної бібліотеки з 3.9: ZoneInfo, пошук бази IANA, пакет tzdata |
| PEP 615 — IANA-пояси в стандартній бібліотеці | Обґрунтування zoneinfo: чому фіксоване зміщення не замінює назву поясу |
| PEP 495 — локальний час без двозначності | Поле fold: як розрізняють дві однакові години осіннього переходу |
| Що нового в Python 3.12 · застаріле | Оголошення datetime.utcnow() і utcfromtimestamp() застарілими |
| IANA Time Zone Database | Першоджерело правил переходу на літній час і історії зміщень для кожної місцевості |
| RFC 3339 | Профіль ISO 8601 для міток часу в інтернеті: саме його читає й пише isoformat |
| argparse | Розбір командного рядка: add_argument, type, choices, nargs, підкоманди |
| Argparse Tutorial | Офіційний покроковий вступ: від sys.argv до готової утиліти |
| sys.argv і sys.exit | Що саме потрапляє в argv[0] і що робить sys.exit з рядком замість числа |
| subprocess | Запуск програм із Python: returncode, capture_output, подача даних на stdin |
| POSIX · Utility Conventions | Звідки взялися домовленості про -h, подвійний -- і дефіс замість імені файлу |
| click | Альтернатива argparse на декораторах: підкоманди, кольори, інтерактивні запити |
| Typer | Інтерфейс командного рядка з анотацій типів функції |
| open() | Повний перелік режимів, аргументи encoding, errors, newline, buffering |
| pathlib | Шляхи як обʼєкти: Path, оператор /, .stem/.suffix, glob, mkdir |
| pathlib ↔ os.path | Офіційна таблиця відповідників: що чим замінюється в старому коді |
| io | Шари файлового обʼєкта, буферизація, TextIOWrapper і flush() |
| Standard Encodings | Перелік кодувань разом із cp1251, utf-8-sig і псевдонімами |
| Unicode HOWTO | Чому текст — не байти: кодування, декодування, звідки береться UnicodeDecodeError |
| PEP 597 — EncodingWarning | Прапорець -X warn_default_encoding і чому пропущений encoding небезпечний |
| PEP 686 — UTF-8 за замовчуванням | План зробити UTF-8 типовим кодуванням і прибрати залежність від налаштувань системи |
| tempfile | mkdtemp і компанія: де безпечно ставити експерименти з файлами |
| shutil | Копіювання, переміщення й rmtree — операції над теками цілком |
| Data model | Повний перелік магічних методів: що саме викликає кожен оператор і що метод має повернути |
| object.__hash__ | Контракт рівності й хешу: чому визначення __eq__ ставить __hash__ = None |
| functools.total_ordering | Декоратор, що добудовує решту порівнянь з __eq__ і одного методу порядку |
| Context manager types | Точні правила для __enter__ і __exit__: аргументи про виняток і сенс поверненого значення |
| PEP 343 — інструкція with | Обґрунтування протоколу менеджера контексту й точний розгортання with у try/finally |
| contextlib | Менеджер контексту з функції через @contextmanager, suppress, ExitStack |
| NumPy | Довідник з масивів |
| pandas | Робота з таблицями |
| Matplotlib | Побудова графіків |
04 / Версія мовиНа що орієнтуємось
Версія мови, на яку орієнтуємось — Python 3.12 і новіші. Там, де поведінка відрізняється у старіших версіях, це зазначено прямо в темі.