Курс Python

Джерела

Куди йти, коли треба перевірити деталь або копнути глибше за межі курсу.

← до списку тем

01 / ПершоджерелоОфіційна документація

Головне правило: якщо джерела суперечать одне одному — правда в офіційній документації. Вона ж найшвидше оновлюється, коли в мові щось змінюється.

Офіційна документація Python

Є українською. Найточніше джерело — саме сюди варто йти, коли треба перевірити поведінку.

Підручник Python (tutorial)

Офіційний покроковий вступ від авторів мови.

PEP 8 — стиль коду

Як прийнято форматувати код. Читається за годину, економить роки суперечок.

PEP 20 — Дзен Python

Двадцять рядків про філософію мови. Наберіть import this.

02 / УкраїнськоюПосібники

Путівник мовою програмування Python

Україномовний посібник Г. Мізюка. Ми брали з нього орієнтир для переліку й порядку тем; тексти, приклади та інтерактиви курсу написані самостійно.

03 / ДовідникиІнструменти й бібліотеки

ресурсдля чого
Real PythonГлибокі статті англійською, часто з візуалізаціями
Python TutorПокроково показує, що відбувається в памʼяті
collectionsnamedtuple, черги, лічильники — стандартні структури поверх базових
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 типовим кодуванням і прибрати залежність від налаштувань системи
tempfilemkdtemp і компанія: де безпечно ставити експерименти з файлами
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
input()Що саме повертає виклик і чому підказка друкується без переносу рядка
Format Specification Mini-LanguageПершоджерело для :.2f, :, і вирівнювання < > ^
PEP 3111 — input у Python 3Чому raw_input перейменували, а старий input прибрали як небезпечний
getpassВведення, яке не показується на екрані — коли input не годиться
sqlite3Модуль стандартної бібліотеки: курсор, commit, row_factory, параметри запиту
Datatypes In SQLiteДинамічна типізація й спорідненість типу: чому "25" у стовпці integer стає числом
STRICT TablesЯк увімкнути сувору перевірку типів, якщо динамічна не влаштовує
EXPLAIN QUERY PLANЯк читати план запиту: SCAN проти SEARCH USING INDEX
Appropriate Uses For SQLiteМежа інструмента від самих авторів: де файлової бази досить, а де потрібен сервер
requestsБібліотека запитів: params, timeout, Session, обробка помилок
RFC 9110 — HTTP SemanticsПершоджерело методів, кодів станів і понять «безпечний» та «ідемпотентний»
RFC 3986 — URIБудова адреси й відсоткове кодування: що саме доводиться екранувати
RFC 6750 — Bearer TokenСхема Authorization: Bearer і чому токен не місце в адресі
http.serverМінімальний сервер зі стандартної бібліотеки — на ньому працює практика блоку 6
urllib.parseРозбір і збирання адрес, quote і urlencode
Beautiful SoupРозбір HTML: find, select, вибір парсера
RFC 9309 — Robots Exclusion ProtocolСтандарт robots.txt: що він означає й чого не робить
NumPyДовідник з масивів
pandasРобота з таблицями
MatplotlibПобудова графіків

04 / Версія мовиНа що орієнтуємось

Версія мови, на яку орієнтуємось — Python 3.12 і новіші. Там, де поведінка відрізняється у старіших версіях, це зазначено прямо в темі.