Python з нуля

Глосарій

Усі поняття курсу в одному місці: що воно означає, як зветься англійською і в якій темі про нього розказано докладно.

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

Цей словник розвʼязує одну задачу: одне поняття — одна назва. Курс писався тридцятьма пʼятьма темами поспіль, і термінологія в ньому складалась по ходу; тут вона зведена до канону. Якщо в темі трапиться інше слово для того самого — правильним вважається те, що стоїть тут заголовком.

Заголовок статті українською там, де український відповідник усталений і зрозумілий (зріз, виняток, включення), і англійською там, де перекладати нема чого або переклад вийшов би гіршим за оригінал (dataclass, f-рядок, traceback, MRO). Другий варіант завжди поруч із першим, тому шукати можна будь-яким. Де переклад спірний — у статті є окрема нотатка про те, які ще варіанти трапляються й чому обрано саме цей. Усього тут 91 стаття: 71 з українським заголовком і 20 з англійським.

Абетковий покажчик

Українською

Англійською

кирилицяА

Анотація типу type hint, annotation

Примітка про очікуваний тип, записана двокрапкою після імені: кількість: int, а для результату функції — стрілкою -> float. Сам Python за нею нічого не перевіряє: це документація, записана так формально, що її може прочитати програма.

Канонічна назва курсу — анотація, а не «підказка типу»: калька з hint натякає на необовʼязкову пораду, тоді як для @dataclass анотація — обовʼязкова розмітка, без якої рядок узагалі не стане полем.

Вводиться: 29. Типи (type hints) · 28. Dataclass і сучасний стиль

Асинхронність asynchrony, async

Спосіб зайняти корисною роботою той час, коли програма стоїть і чекає на відповідь ззовні — від мережі, диска чи бази даних. Потік при цьому один: асинхронність не рахує швидше, вона лише дозволяє почати друге очікування, не дочекавшись першого.

Типова хибна надія — «додам async, і буде швидше». Там, де немає пауз, а процесор зайнятий обчисленнями, виграшу немає взагалі.

Вводиться: 32. Асинхронність — базово

Атрибут attribute

Поле обʼєкта, до якого звертаються через крапку: p.ціна. У примірника атрибути лежать у звичайному словнику p.__dict__, і крапка — просто зручний запис для роботи з ним.

Python не веде списку дозволених полів, тому одруківка не падає, а мовчки створює новий атрибут: після p.кількіть = 7 сума рахуватиметься по старому значенні.

Вводиться: 25. Класи й обʼєкти

кирилицяБ

Блокувальний виклик blocking call

Звичайний синхронний виклик, який чекає, не віддаючи керування: time.sleep, requests.get, open().read(). Усередині асинхронної програми він зупиняє єдиний потік, а разом із ним і цикл подій — усі задачі стоять.

Програма від цього не падає, вона просто тихо перестає бути асинхронною. Рятує asyncio.to_thread, який віддає такий виклик окремому потоку.

Вводиться: 32. Асинхронність — базово

кирилицяВ

Векторизація vectorization

Запис, у якому операція застосовується одразу до всього масиву без жодного циклу: масив * 1.2 множить кожен елемент і повертає новий масив.

Цикл for по масиву не просто зайвий — він приблизно вдвічі повільніший за цикл по списку, бо кожен елемент доводиться загортати у свіжий обʼєкт Python.

Вводиться: 33. NumPy: масиви

Вигляд (масиву) view

Новий обʼєкт NumPy, який дивиться на ту саму памʼять, лише з іншого місця. Зріз масиву — саме вигляд, тому запис у зріз змінює оригінал.

Протилежність зрізу списку, який був копією. Ліки — .copy(); перевірка — np.shares_memory. Не плутай з представленням словника: обидва англійською view, але курс тримає для них різні слова навмисно.

Вводиться: 33. NumPy: масиви

Виняток exception

Обʼєкт, який програма кидає нагору, коли граматика коду бездоганна, програма вже працює, але конкретна дія саме зараз неможлива: файлу немає, ділять на нуль, ключа немає в словнику.

Курс каже саме виняток, а не «виключення»: назва точна як «виняток із правила», і виняток не завжди чиясь провина — кінець файлу і Ctrl+C теж винятки.

Вводиться: 18. Помилки та винятки

Віртуальне середовище virtual environment

Звичайна тека (за домовленістю .venv) із власним набором бібліотек і власним python, щоб два проєкти з різними версіями однієї бібліотеки не воювали. Створюють командою python3 -m venv .venv.

Це не віртуальна машина й не контейнер: ізолюється лише набір пакетів. Переносити чи перейменовувати теку не можна — усередині абсолютні шляхи, простіше створити заново.

Вводиться: 17. Віртуальні середовища і pip

Вісь axis

Напрямок у масиві чи таблиці: вісь 0 іде вниз по рядках, вісь 1 — вправо по стовпцях, і саме в такому порядку вони записані у формі (shape) — кортежі довжин по кожному виміру.

У згортках axis=k — це вісь, уздовж якої рухається підсумовування, і саме вона зникає з форми результату. «Сума по магазинах» — це axis=1, хоч інтуїція часто підказує нуль.

Вводиться: 33. NumPy: масиви

Включення comprehension

Однорядковий запис найчастішого циклу — того, що бере одну колекцію й будує з неї другу: [ціна * 2 for ціна in цінник]. Буває спискове, множинне й словникове, за виглядом дужок.

Це канонічна назва курсу; англійською кажуть list comprehension, і в текстах трапляється калька «списковий вираз». Головне тут не економія рядків: включення описує результат, а цикл — процес, тому вираз стоїть попереду, ще до слова for.

Вводиться: 13. Спискові включення

кирилицяГ

Генератор generator

Функція, у тілі якої є слово yield, і обʼєкт, який повертає її виклик. Значення вона віддає по одному, на вимогу, а не будує весь список одразу — це і називають лінивими обчисленнями (lazy evaluation).

Генератор тримає один елемент за раз плюс свій кадр — близько 464 байтів незалежно від того, мільйон там значень чи мільярд. Плата: пройтись ним можна рівно один раз, len() і зрізів у нього немає. Лінь не робить роботу дешевшою — вона лише не робить зайвої, тому на малих обсягах список часто швидший.

Вводиться: 30. Ітератори й генератори

Генераторний вираз generator expression

Те саме включення, але в круглих дужках: воно нічого не будує одразу, а віддає значення по одному. Мільйон значень коштує 200 байтів проти восьми мегабайтів у списку.

Усередині виклику функції власні дужки не потрібні: sum(ціна * к for ціна, к in zip(...)) рахує суму, жодного разу не створивши проміжного списку.

Вводиться: 13. Спискові включення · 30. Ітератори й генератори

кирилицяД

Декоратор decorator

Функція, яка приймає функцію й повертає нову функцію. Рядок @таймер над def підсумок — це буквально підсумок = таймер(підсумок), виконане один раз при читанні файлу, а не при виклику.

Внутрішню функцію декоратора називають обгорткою (wrapper). Найпоширеніша перша помилка — забути в ній return результат: функція раптом починає повертати None, і причину шукають не там.

Вводиться: 31. Декоратори

Докстрінг docstring

Рядок у потрійних лапках, що стоїть першим у тілі функції, класу чи модуля. Python зберігає його в самому обʼєкті, тому help(функція) і функція.__doc__ показують саме його.

Пиши в ньому те, чого з коду не видно — одиниці виміру, припущення, дивні випадки, — а не переказ самого коду.

Вводиться: 14. Функції

кирилицяЖ

Жадібність greediness

Поведінка квантифікаторів регулярного виразу за замовчуванням: вони беруть якнайбільше, тобто до кінця рядка, а потім віддають назад по одному символу, поки решта шаблону не складеться.

Саме тому r"<.+>" повертає весь рядок замість одного тега. Знак питання (.+?) робить квантифікатор лінивим: він бере якнайменше.

Вводиться: 23. Регулярні вирази

кирилицяЗ

Замикання closure

Внутрішня функція разом із захопленими іменами зовнішньої: обгортка вже завершилась, а її памʼять живе, поки жива внутрішня функція.

Це не виняток із правил області видимості, а їх наслідок: зникає кадр, а не обʼєкти, на які з нього хтось іще дивиться. Саме на замиканнях побудовані декоратори.

Вводиться: 15. Аргументи й область видимості · 31. Декоратори

Захисна умова __main__ main guard

Рядок if __name__ == "__main__":, який читається як «якщо мене запустили головним, а не імпортували». У змінній __name__ при прямому запуску лежить "__main__", а при імпорті — справжнє імʼя модуля.

Правило: на верхньому рівні файлу, який хтось може імпортувати, мають бути тільки означення, а все, що щось робить, ховається під цю умову.

Вводиться: 16. Модулі й пакети

Змінюваний і незмінний обʼєкт mutable / immutable

Незмінний обʼєкт (int, float, str, tuple, bool, None) після створення вже ніколи не зміниться; будь-яка «зміна» створює новий обʼєкт. Змінюваний (list, dict, set, більшість власних класів) редагують зсередини, не створюючи нового.

Незмінність діє лише на один рівень: дані[0] = [9] у кортежі заборонено, а дані[0].append(3) працює — бо міняє не стрілку, а обʼєкт на її кінці.

Вводиться: 03. Змінні та обʼєкти · 07. Кортежі й розпакування

Значення за замовчуванням default value

Значення, записане в рядку def через =, яке підставляється, якщо відповідного аргументу не передали. Обчислюється один раз, у момент виконання рядка def, а не на кожен виклик.

Звідси найвідоміша пастка Python: def додати(що, кошик=[]) отримує щоразу той самий список — уже з усім, що накидали попередні виклики. Ліки: ставити None і створювати список усередині функції.

Вводиться: 15. Аргументи й область видимості

Зріз slice

Взяти не один елемент, а цілий діапазон: послідовність[старт:стоп:крок] — почни зі старту, зупинись перед стопом, крокуй по кроку. Будь-яке з трьох чисел можна пропустити.

Верхня межа не входить — звідси дві зручності: довжина зрізу дорівнює стоп − старт, а s[:5] + s[5:] завжди дає вихідний рядок. Зріз ніколи не падає за межі, на відміну від індексу.

Вводиться: 05. Рядки · 06. Списки

кирилицяІ

Ідентичність identity

Відповідь на питання «це той самий обʼєкт чи інший, просто схожий?». Її повертає id(x), і саме про неї питає оператор is, тоді як == питає про значення.

Правило: is бережи майже виключно для None. Для чисел і рядків він «працює» на маленьких значеннях і ламається на великих, бо CPython кешує лише цілі від −5 до 256 — це оптимізація, а не правило мови.

Вводиться: 03. Змінні та обʼєкти · 11. Умови

Імʼя name

Ярлик, наклеєний на обʼєкт, а не коробка зі значенням. Знак = спершу обчислює вираз праворуч, і в памʼяті зʼявляється обʼєкт, а потім прикріплює до нього імʼя — цю дію звуть звʼязуванням імені (name binding). Тому b = a — не копіювання, а другий ярлик на той самий обʼєкт.

Слово «змінна» лишилось за традицією, але точніше казати імʼя: так написано і в документації Python. Модель «коробки зі значенням» тут не працює: коробка вміщує значення, ярлик лише вказує на нього. Скористатися імʼям до присвоєння не вийде — буде NameError.

Вводиться: 03. Змінні та обʼєкти

Індекс index

Номер елемента в послідовності, що починається з нуля. Індекс — це не «котрий за рахунком», а відстань від початку, тому нульовий елемент стоїть на нульовій відстані; відʼємний індекс -k означає len(x) - k.

У pandas тим самим словом (і тим самим англійським index) звуть інше: окремий обʼєкт із міткою для кожного рядка таблиці, і мітка не мусить збігатися з позицією. Звідси різниця loc (за міткою) і iloc (за позицією) у темі 34.

Вводиться: 05. Рядки · 06. Списки

Ініціалізатор initializer, __init__

Метод __init__, який наповнює вже створений порожній примірник полями й перевіряє, що дані мають сенс. Коли він починає працювати, обʼєкт уже існує й уже має id().

Підручники називають його конструктором — слово прижилось, але неточне: власне створенням обʼєкта займається інший метод, __new__, якого ти майже ніколи не пишеш.

Вводиться: 25. Класи й обʼєкти

Істинність truthiness

Правило, за яким if питає «ти істина?» у будь-якого обʼєкта, а не лише в bool. Хибними вважаються False, None, нулі будь-якого числового типу й порожні колекції; усе інше істинне.

Дві головні пастки — "0" і [0]: обидва істинні, бо непорожні, і Python не заглядає всередину. Пиши if міста:, а не if len(міста) > 0:.

Вводиться: 11. Умови · 27. Магічні методи

Ітератор iterator

Крихітний обʼєкт-обхідник, який уміє віддати наступний елемент і запамʼятати, де зупинився. Позиція в ньому тільки росте; повернутись на початок він не вміє принципово.

Саме тому zip, enumerate, map, filter і відкритий файл одноразові: пройдені двічі, вдруге вони не зроблять жодного кроку — і навіть не впадуть. У лекціях трапляється синонім «обхідник».

Вводиться: 30. Ітератори й генератори · 12. Цикли

Ітерований обʼєкт iterable

Джерело, у якого можна попросити ітератор: список, кортеж, рядок, словник, множина, range, файл. Сам він нічого не памʼятає — просто вміє на вимогу видати новий обхідник, який почне з початку.

Питай себе не «чи це працює в for», а «це джерело чи вже обхід». Перевірка одним рядком: iter(список) is iter(список) дає False, а iter(ітератор) is ітераторTrue.

Вводиться: 30. Ітератори й генератори · 12. Цикли

кирилицяК

Качина типізація duck typing

Підхід, у якому питають не про рід обʼєкта, а про його вміння: якщо щось ходить як качка й крякає як качка, для нашої задачі воно й є качка — просто клич потрібний метод.

isinstance як спосіб «пустити чи не пустити» майже завжди зайвий. Формально те саме описує Protocol із теми 29: перевірювач звіряє не походження, а форму.

Вводиться: 26. Наслідування й композиція · 29. Типи (type hints)

Клас class

Спосіб сказати мові, що в програмі є новий тип даних: ось які поля в ньому обовʼязкові, ось за яких умов він має право існувати, ось що з ним можна робити. Клас — це опис, як креслення; жодного конкретного продажу в ньому немає.

Клас потрібен там, де є поведінка — правила, перевірки, обчислення, які мають жити поруч із даними. Один метод і жодного стану — це просто функція.

Вводиться: 25. Класи й обʼєкти

Кодування encoding

Таблиця відповідності між байтами у файлі й символами тексту. Кодування в самому файлі не зберігається — його треба знати наперед і передавати явно: open(..., encoding="utf-8"). Стандарт де-факто — UTF-8, змінної довжини: латиниця займає 1 байт, кирилиця — 2, емодзі — 4.

Без явного encoding Python бере налаштування системи, тому той самий код читає файл по-різному на Linux і на Windows. Тиха біда — мотлох на кшталт «РљРёС—РІ», гучна — UnicodeDecodeError. len() рахує символи, а не байти; файли з Excel часто починаються з мітки BOM, що ламає першу колонку, — це лікує utf-8-sig.

Вводиться: 05. Рядки · 20. Файли й pathlib

Композиція composition

Спосіб повторного використання коду, коли обʼєкт не успадковує поведінку, а тримає інший обʼєкт у своєму атрибуті й звертається до нього. Передавання роботи такому обʼєкту звуть делегуванням.

Формула для памʼяті: наслідування — «Книга є різновидом Видання», композиція — «Книга має всередині Носій». Композицію варто писати за замовчуванням.

Вводиться: 26. Наслідування й композиція

Конвеєр pipe, pipeline

У командному рядку — вертикальна риска |, що зʼєднує вивід лівої програми з входом правої. У роботі з генераторами — кілька генераторів, зчеплених один з одним, де дані не течуть уперед, а їх тягнуть назад, по одному елементу.

Ідея в обох випадках та сама: жодного проміжного файлу чи списку не існує ніде. У командному рядку конвеєр іноді називають «трубою».

Вводиться: 24. Скрипти командного рядка · 30. Ітератори й генератори

Копія: поверхнева й глибока shallow / deep copy

Поверхнева копія (a[:], list(a), a.copy()) — новий список із новими комірками, але комірки заповнені тими самими посиланнями. Глибока (copy.deepcopy(a)) обходить структуру рекурсивно й створює новий обʼєкт на кожному рівні вкладеності.

Поки всередині лише рядки й числа, різниці не видно; щойно зʼявиться вкладений список — поверхнева копія «протікає». Правило: лише незмінні елементи — вистачить a.copy(), є вкладені змінювані — потрібен deepcopy.

Вводиться: 06. Списки

Коротке замикання short-circuit evaluation

and і or ліниві: обчислюють лівий операнд і, якщо його достатньо для відповіді, правий не обчислюють узагалі. Звідси головна ідіома захисту — if вимірів != 0 and сума / вимірів > 15.

Вони повертають не True/False, а один із самих операндів — тому введено or 10 тихо замінить чесний нуль на десятку. Якщо питання саме «значення не задали», пиши is None.

Вводиться: 11. Умови

Кортеж tuple

Упорядкований набір значень, як список, але без жодної операції, що його змінює. Створює його кома, а не дужки: (5) — це число в дужках, а (5,) і 5, — кортежі.

Кортеж обирають не за швидкістю, а за змістом: «одна річ із кількох фіксованих полів», тоді як список — «багато однорідних штук, кількість плаває». Зайва кома в кінці рядка мовчки робить кортеж і вилазить чужим TypeError.

Вводиться: 07. Кортежі й розпакування

Корутина coroutine

Обʼєкт, який повертає виклик функції, оголошеної через async def: усередині записано, що треба зробити, але ніхто ще не почав це робити. Рецепт, а не страва — виконання починається лише з await.

Курс каже корутина; у темі 30 той самий англійський coroutine перекладено як «співпрограма» — там ідеться про генератор, який уміє приймати значення через send(). Це той самий корінь, але різні механізми, і плутати їх не варто.

Вводиться: 32. Асинхронність — базово · 30. Ітератори й генератори

кирилицяМ

Магічний метод magic method, dunder method

Метод із подвійними підкресленнями з обох боків імені (__len__, __eq__, __enter__), за яким стоїть домовленість із мовою: реалізуєш його — і твій обʼєкт починає працювати з len, for, in, + чи with як вбудований тип. Домовленість про те, як метод зветься, що приймає й що повертає, звуть протоколом (protocol).

Ніякої магії немає: len(x) — це коротка форма запису type(x).__len__(x). Шукаються такі методи в класі, а не в примірнику. Англійське dunder (від double underscore) у лекціях трапляється як «дандер-метод», але канонічна назва курсу — магічний метод.

Вводиться: 27. Магічні методи · 30. Ітератори й генератори

Маска boolean mask

Масив або стовпець зі значеннями True/False, який повертає порівняння: питання, задане масиву, приходить назад масивом відповідей. Такою маскою індексують — лишаються лише елементи, навпроти яких True.

Умови поєднують &, |, ~ — не and/or/not, — і кожну обовʼязково беруть у власні дужки, бо & звʼязує сильніше за >.

Вводиться: 33. NumPy: масиви · 34. Pandas: таблиці

Менеджер контексту context manager

Обʼєкт, який уміє стояти після with: він знає, що зробити на вході в блок (__enter__) і що зробити на виході (__exit__), причому вихід відбувається завжди — хоч через кінець блоку, хоч через return чи виняток.

with закриває, але не рятує: виняток, що стався всередині, летить далі вгору так само, як без with. Менеджер контексту гарантує прибирання, а не тишу.

Вводиться: 20. Файли й pathlib · 27. Магічні методи · 18. Помилки та винятки

Метод method

Функція, означена в тілі класу й «приклеєна» до обʼєкта: пишеться через крапку після нього — напій.upper(). Відмінність від звичайної функції рівно одна: перший параметр self.

Найчастіша помилка новачка з методами рядка — викликати напій.upper() і нічого не записати: рядок незмінний, тож новий створено й тієї ж миті викинуто.

Вводиться: 05. Рядки · 25. Класи й обʼєкти

Множина set

Набір несхожих елементів без порядку — той самий словник, у якого забрали значення й лишили самі ключі. Той самий елемент не може лежати в ній двічі, а питання «що там перше» до неї не ставлять узагалі.

Порожню множину не можна записати як {} — порожні фігурні дужки історично закріплені за словником; єдиний спосіб — set(). Незмінний різновид зветься frozenset і тому може бути ключем словника.

Вводиться: 09. Множини

Модуль module

Файл із розширенням .py; його імʼя — імʼя файлу без .py. Іншого означення немає: будь-який твій файл уже є модулем. Тека з модулями — це пакет (package).

Кожен модуль має власний простір імен (namespace), тому однакові імена в різних файлах не заважають одне одному. Імпорт — це виконання файлу згори вниз, і рівно один раз за запуск: далі модуль беруть із кешу sys.modules.

Вводиться: 16. Модулі й пакети

кирилицяН

Наївний і обізнаний час naive / aware datetime

Наївний datetime має порожнє поле tzinfo: він знає, що написано на циферблаті, і не знає, чий це циферблат, тому не позначає жодної конкретної миті. Обізнаний знає ще й часовий пояс — і тому вказує на мить однозначно.

Порівняння наївного з обізнаним через < дає TypeError, а == тихо повертає False — перевірка мовчки не спрацює жодного разу. Правильне «зараз» — datetime.now(timezone.utc).

Вводиться: 22. Дати й час

Наслідування inheritance

Спосіб оголосити один клас різновидом іншого: похідний клас автоматично отримує методи базового. Оголосити в похідному класі метод із тим самим імʼям — це перевизначення (overriding).

Успадковуються методи, а не дані. Найпоширеніша пастка — написати свій __init__ і не покликати в ньому super().__init__(...): обʼєкт створиться без помилки, а впаде значно пізніше й в іншому місці.

Вводиться: 26. Наслідування й композиція

кирилицяО

Область видимості scope

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

Локальність вирішується наперед: якщо десь у тілі функції є присвоєння імені, воно локальне від першого рядка — звідси UnboundLocalError при спробі спершу прочитати зовнішнє значення. Порядок пошуку описує LEGB.

Вводиться: 15. Аргументи й область видимості

Обʼєкт object

Усе, що живе в памʼяті Python: число, рядок, список, функція й навіть сам тип. Кожен обʼєкт має рівно три речі — тип, значення й ідентичність.

Це не фігура мови, а буквальне влаштування мови: саме тому функцію можна покласти в список, а клас — передати аргументом.

Вводиться: 03. Змінні та обʼєкти

кирилицяП

Параметр і аргумент parameter / argument

Параметр — імʼя в дужках у рядку def, «порожнє місце» на вході функції. Аргумент — конкретне значення, яке підставляють у момент виклику.

Параметр один на всю функцію, аргументи різні на кожен виклик. Курс тримається цієї пари послідовно й не вживає «формальний / фактичний аргумент».

Вводиться: 14. Функції · 15. Аргументи й область видимості

Позиційний і іменований аргумент positional / keyword argument

Позиційний передають без імені, і все вирішує порядок. Іменований передають із явною вказівкою параметра — оформити(товар="мед", кількість=3), — і порядок йому байдужий.

Усі позиційні мають стояти перед усіма іменованими, інакше SyntaxError. Переставлені позиційні аргументи часто дають не помилку, а мовчки неправильну відповідь, тому булеві прапорці й числа-налаштування варто іменувати завжди.

Вводиться: 15. Аргументи й область видимості

Представлення словника dict view

Те, що повертають .keys(), .values() і .items() — не списки й не копії, а живі вікна в той самий словник: змінити через них нічого не можна, зате вони самі оновлюються разом зі словником.

Англійською це теж view, як і вигляд масиву NumPy, але поводяться вони по-різному: представлення тільки читає, а у вигляд можна писати — і запис дійде до оригіналу. Щоб отримати застиглу копію, пиши list(книга.keys()).

Вводиться: 08. Словники

Примірник instance

Конкретний обʼєкт, зроблений за описом класу. Щоб його отримати, клас викликають, як функцію: Продаж("кава", 3, 90.0). Один клас — скільки завгодно примірників, кожен зі своїми даними, але з одним спільним набором правил.

Канонічна назва курсу — примірник; «екземпляр» та «інстанс» трапляються в інших текстах, але тут їх не вживають.

Вводиться: 25. Класи й обʼєкти

кирилицяР

Регресія regression

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

Ручна перевірка тут не рятає з простої причини: ти перевіряєш те, що правив, а ламається те, чого не чіпав. Знайшов баг — спершу відтвори його тестом, і тільки потім лагодь.

Вводиться: 19. Тестування з pytest

Регулярний вираз regular expression

Крихітна мова, якою описують форму тексту, а не сам текст. Потрібна тоді, коли перелічити всі варіанти неможливо: «усі числа», «дата у трьох форматах», «правильний телефон».

Шаблон завжди пишуть сирим рядком (raw string) — r"\d+", — щоб зворотні скісні дійшли до модуля re недоторканими. Вкладені структури (HTML, JSON, дужки) регулярний вираз не описує принципово. У розмові кажуть «регулярка».

Вводиться: 23. Регулярні вирази

Розпакування unpacking

Кілька імен ліворуч від = отримують елементи послідовності по порядку: широта, довгота = точка. Зворотна дія, коли значення через кому самі збираються в кортеж, зветься пакуванням.

Кількості мусять збігтися, і Python перевіряє це наперед — після невдалого розпакування жодне імʼя не встигає отримати значення. Імʼя із зірочкою (*середина) забирає решту й завжди у список.

Вводиться: 07. Кортежі й розпакування · 15. Аргументи й область видимості

Рядок string, str

Впорядкована незмінна послідовність символів у лапках. Одинарні й подвійні лапки не відрізняються нічим — два варіанти існують, щоб класти всередину лапки іншого виду.

Незмінність тут не дрібниця: жодного способу відредагувати рядок на місці немає, і всі методи повертають новий обʼєкт.

Вводиться: 05. Рядки

кирилицяС

Серіалізація serialization

Перетворення обʼєкта Python на текст, який можна покласти у файл чи послати мережею, і назад. У модулі json це чотири функції: dumps/loads працюють із рядком у памʼяті, dump/load — із відкритим файлом.

Перетворення не взаємно однозначне: кортеж стає списком, а числові ключі словника стають рядками — мовчки й без помилки. Множина й дата не серіалізуються взагалі.

Вводиться: 21. CSV і JSON

Складність complexity, O-нотація

Спосіб сказати, як росте кількість роботи зі зростанням обсягу даних. O(1) — стала кількість дій незалежно від довжини; O(n) — пропорційно довжині.

O(1) не означає «швидко» — запис навмисно ігнорує сталі множники. Практичне правило курсу: якщо в задачі є слова «чи є» або «чи вже було», структура має бути хеш-таблицею, тобто множиною або словником.

Вводиться: 06. Списки · 10. Яку структуру обрати

Словник dictionary, dict

Набір пар «ключ → значення», який відповідає на питання «що записано під цим іменем» приблизно за один крок незалежно від розміру. Ключі в межах словника унікальні, значення — будь-які.

Список нумерує позиції, словник іменує вміст. З Python 3.7 словник гарантовано віддає ключі в порядку вставки — це саме порядок додавання, а не сортування.

Вводиться: 08. Словники

Список list

Упорядкована змінювана послідовність посилань, записана у квадратних дужках через кому. Комірка не вміщує елемент — вона вказує на обʼєкт, який живе окремо в памʼяті.

Саме тому список може тримати різнотипні значення: усі комірки однакові за розміром. Методи, що працюють на місці (append, sort, reverse), повертають None — їх викликають окремим рядком, без присвоєння.

Вводиться: 06. Списки

Стек викликів call stack

Стопка, у якій інтерпретатор тримає всі активні виклики: класти й брати можна лише згори, тому кожна функція повертається рівно туди, звідки її покликали. Один її поверх — кадр (frame) з параметрами та локальними іменами одного виклику.

Саме цю стопку ти бачиш у traceback. Тим самим стеком піднімається виняток: Python питає кожен кадр, чи є там відповідний except.

Вводиться: 14. Функції · 18. Помилки та винятки

кирилицяТ

Тернарний вираз conditional expression

Коротка форма розвилки, коли треба обрати одне з двох значень: значення_якщо_істина if умова else значення_якщо_хиба. Це вираз: він має значення, тому його можна присвоїти, передати аргументом чи покласти в список.

Правило, що знімає головну плутанину з включеннями: else буває тільки в тернарі, тож якщо else є — конструкція мусить стояти перед for; якщо немає — if іде після for і працює як фільтр.

Вводиться: 11. Умови · 13. Спискові включення

Тип type

Сорт, до якого належить обʼєкт, і набір того, що з ним можна робити; показує його type(x). Тип належить обʼєкту, а не імені — це й називають динамічною типізацією.

Динамічна типізація дає свободу, але типів не скасовує: "вік: " + 30 не «якось приведеться», а зупинить програму з TypeError.

Вводиться: 03. Змінні та обʼєкти

Транслювання broadcasting

Правило, за яким масиви різних форм усе одно поєднуються поелементно: форми порівнюють справа наліво, коротшу доповнюють одиницями зліва, а вісь довжиною 1 розтягується вздовж потрібного розміру.

«Розтягування» — фігура мови: NumPy нічого не копіює, а просто ходить по тій самій памʼяті кілька разів, тому транслювання безкоштовне за памʼяттю. Будь-яке інше поєднання дає ValueError.

Вводиться: 33. NumPy: масиви

кирилицяФ

Фікстура fixture

Функція з декоратором @pytest.fixture, результат якої тест просить просто за іменем параметра; так кілька тестів дістають ту саму заготовку, не копіюючи підготовку.

Ключова властивість — фікстура виконується заново для кожного тесту, тому перший тест не зіпсує дані другому. Треба прибрати за собою — пиши yield замість return.

Вводиться: 19. Тестування з pytest

Функція function

Імʼя, почеплене на шматок коду: ти один раз описуєш дію, а далі згадуєш її імʼям. Рядок def не виконує тіло — він лише створює обʼєкт-функцію й вішає на нього ярлик.

Головна вигода не в економії рядків, а в тому, що правило записане в одному місці. Функція без return тихо повертає None; правило курсу — функція рахує й повертає, а друкує той, хто її викликав.

Вводиться: 14. Функції

кирилицяХ

Хеш і хешованість hash, hashability

Хеш — коротке ціле число, «відбиток» обʼєкта, який рахується швидко й має ключову властивість: рівні обʼєкти дають рівний хеш. Хешованість — здатність обʼєкта дати хеш і тому стати ключем словника або елементом множини.

Змінювані типи хеша не мають узагалі — це свідома заборона, а не забудькуватість. Кортеж хешований тоді й лише тоді, коли хешовані всі його елементи на будь-якій глибині; повідомлення unhashable type: 'list' називає винуватця всередині.

Вводиться: 07. Кортежі й розпакування · 08. Словники · 27. Магічні методи

кирилицяЦ

Цикл loop

Повторення тіла для кожного елемента (for) або доки істинна умова (while). Головна відмінність for у Python від інших мов: він нічого не рахує, а просить у джерела наступний елемент.

for i in range(len(...)) з наступним дані[i] — майже завжди ознака звички з іншої мови. Найдорожча пастка теми — видаляти елементи зі списку, який зараз обходиш: один елемент мовчки проскочить повз.

Вводиться: 12. Цикли

Цикл подій event loop

Нескінченний цикл, який тримає чергу готових задач і список тих, що чекають, і по черзі виконує їхні тіла, доки задача не дійде до await. Потік один: у кожен момент виконується рівно одна задача.

Задачі поступаються керуванням добровільно — рівно там, де написано await, і більше ніде; це називають кооперативною багатозадачністю. У лекціях трапляється й порядок слів «подієвий цикл» — канонічний варіант курсу «цикл подій».

Вводиться: 32. Асинхронність — базово

кирилицяЧ

Число з рухомою крапкою float

Тип для дробових чисел: 64 біти за стандартом IEEE 754. У памʼяті лежить не саме число 0.1, а найближче до нього, яке взагалі можна записати 64 бітами — тому 0.1 + 0.2 дає 0.30000000000000004.

Це властивість формату, а не Python: ті самі цифри видадуть JavaScript, C, Java, Go і Excel. Порівнюють такі числа через math.isclose, а точні гроші рахують у Decimal, створеному з рядка.

Вводиться: 04. Числа й арифметика

Чиста функція pure function

Функція, яка на однакових аргументах завжди повертає однаковий результат і нічого не змінює поза собою — не друкує, не пише у файл, не редагує переданий список.

Чисту функцію перевіряють одним рядком assert; нечисту доводиться перехоплювати. Тому розрахунок і побічні дії тримають у різних функціях. Кешувати (lru_cache) можна теж лише чисту.

Вводиться: 14. Функції

кирилицяШ

Шлях path

Адреса файлу чи теки. Абсолютний шлях рахується від кореня файлової системи й працює звідки завгодно; відносний — від поточної теки. У pathlib шлях перестає бути рядком і стає обʼєктом Path, який знає власну будову.

Path нічого не читає з диска: Path("немає-такого.txt") створюється без скарг, бо це просто обʼєкт із текстом усередині. Плутанина з поточною текою породжує більшість перших помилок «файл не знайдено».

Вводиться: 02. Встановлення й перший запуск · 20. Файли й pathlib

кирилицяЯ

Якір anchor

Позначка в регулярному виразі, яка не збігається з жодним символом, а описує позицію між символами: ^ — початок, $ — кінець, \b — межа слова. Тому в неї нульова ширина.

Якорі — головний спосіб не знайти зайвого: r"\d{4}" зловить і рік, і номер замовлення, а r"^\d{4}" — лише рік.

Вводиться: 23. Регулярні вирази

латиницяC

CSV comma-separated values

Текстовий формат для таблиці: один рядок файлу — один рядок таблиці, поля розділені комою, а перший рядок зазвичай шапка з назвами стовпців.

Розібрати рядок CSV через split(",") не можна: поле з комою всередині беруть у лапки, і наївний поділ ламається тихо, зсувом стовпців. Excel в українській локалі ставить не кому, а крапку з комою — це задають через delimiter=";".

Вводиться: 21. CSV і JSON

латиницяD

dataclass dataclass

Декоратор @dataclass зі стандартного модуля dataclasses, який читає перелік анотованих полів класу й дописує за тебе __init__, __repr__ і __eq__.

Українського відповідника курс не вигадує: «клас даних» ніде не вживається, а англійське слово збігається з іменем декоратора в коді. Змінюване значення за замовчуванням (теги: list = []) він відхиляє одразу, з ValueError.

Вводиться: 28. Dataclass і сучасний стиль

DataFrame DataFrame

Таблиця як один обʼєкт: рядки, іменовані стовпці, у різних стовпцях різні типи. Один стовпець окремо — це Series: послідовність значень одного типу плюс мітка для кожного.

Усередині кожного стовпця живе звичайний масив NumPy, тому арифметика над стовпцями векторна й швидка. Той самий запис таблиця[...] означає то «дай стовпець» (усередині назва), то «дай рядки» (усередині маска).

Вводиться: 34. Pandas: таблиці

латиницяE

EAFP і LBYL EAFP / LBYL

Два стилі поводження з можливою бідою. EAFP (Easier to Ask Forgiveness than Permission) — дій одразу, а якщо не вийшло, обробляй виняток; це стиль Python за замовчуванням. LBYL (Look Before You Leap) — спершу перевір умову, потім дій.

EAFP краще там, де між перевіркою й дією щось може змінитись (файли, мережа, спільні дані). LBYL доречний, коли перевірка дешева й ти перевіряєш власний аргумент.

Вводиться: 18. Помилки та винятки

латиницяF

f-рядок f-string

Літера f перед лапками вмикає підстановку виразів у фігурних дужках: f"{місто}: {товар} коштує {ціна} грн". Усередині дужок може стояти будь-який вираз, не лише імʼя.

Гібридна назва курсу: перекладати string тут є чим, а літеру f — ні. f"{ціна=}" друкує одразу й вираз, і значення — найшвидший спосіб налагодження. Але f-рядком ніколи не збирають SQL, HTML чи команду оболонки з даних від людини.

Вводиться: 05. Рядки

Figure і Axes Figure, Axes

Figure — аркуш паперу: розмір, тло, роздільність, збереження у файл; сам він нічого не малює. Axes — накреслена на аркуші система координат, уся область побудови; малює саме вона: ax.plot, ax.set_title.

Найпідступніша назва в бібліотеці: Axes — це не «осі» в множині. Осі — це Axis (ax.xaxis, ax.yaxis), а Axes — уся область разом з ними.

Вводиться: 35. Графіки matplotlib

латиницяG

GIL Global Interpreter Lock

Глобальне блокування інтерпретатора: один замок на весь CPython, який гарантує, що байткод у кожен момент виконує рівно один потік.

Наслідок: потоки не прискорюють обчислення, скільки б ядер не було. Обійти GIL можна процесами (multiprocessing) — тому процеси для обчислень, потоки для очікувань. До асинхронності це не має стосунку: там потік один.

Вводиться: 01. Що таке програмування і навіщо Python · 32. Асинхронність — базово

латиницяJ

JSON JavaScript Object Notation

Текстовий формат для дерева: усередині запису може лежати список, усередині списку — ще словники, і так на будь-яку глибину. Виглядає майже як словник Python.

Синтаксис суворіший, ніж здається: тільки подвійні лапки, жодних коментарів, жодної коми після останнього елемента, true/false/null маленькими. Для українського тексту у файлі потрібен ensure_ascii=False.

Вводиться: 21. CSV і JSON

латиницяL

LEGB LEGB rule

Порядок, у якому Python шукає імʼя: Local — локальна памʼять виклику, Enclosing — памʼять зовнішньої функції-обгортки, Global — рівень модуля, Built-in — вбудовані імена.

Пошук зупиняється на першому ж рівні, де імʼя знайшлося. Не знайшов ніде — NameError. Рівень G глобальний лише в межах одного файлу, а не всієї програми.

Вводиться: 15. Аргументи й область видимості

латиницяM

MRO method resolution order

Плаский список класів без повторів, яким Python іде зліва направо, шукаючи метод чи будь-який атрибут класу; береться перший знайдений. Побачити його можна через Клас.__mro__.

Українською це «порядок розвʼязання методів», але курс уживає абревіатуру: розгорнута назва довша за саме поняття. super() означає не «мій батько», а «наступний клас у MRO».

Вводиться: 26. Наслідування й композиція

латиницяN

NaN not a number

Особливе значення для дірок у дробових даних — «не число». Воно заражає все, чого торкнеться: одна дірка перетворює середнє всього масиву на nan.

nan не дорівнює сам собі, тому шукати дірки порівнянням марно — для цього є np.isnan і isna(). У цілочисельному масиві його зберегти неможливо, тому стовпець із пропуском завжди стає дробовим.

Вводиться: 33. NumPy: масиви · 34. Pandas: таблиці

None None

Не «порожнеча», а конкретний обʼєкт єдиного свого роду з типом NoneType, який означає «тут значення не передбачене». Його повертає будь-яка функція без return.

Перевіряють через is None, а не == None: None існує в програмі в єдиному примірнику (такий обʼєкт звуть одинаком, singleton), а == — це виклик методу, який клас може перевизначити як завгодно.

Вводиться: 14. Функції · 11. Умови

латиницяP

PEP 8 PEP 8

Офіційна угода спільноти про вигляд коду: чотири пробіли на відступ, пробіли навколо = та знаків дій, імена малими_літерами_з_підкресленнями (стиль snake_case), порожній рядок між логічними частинами.

Не вчи напамʼять — форматувальники black чи ruff format приведуть файл до канону однією командою.

Вводиться: 02. Встановлення й перший запуск · 03. Змінні та обʼєкти

pip pip

Менеджер пакетів Python: ходить у сховище PyPI, завантажує пакет, розпаковує його в site-packages і повторює те саме для всіх залежностей.

Форма python -m pip знімає всі питання про те, чий саме pip спрацював. Через sudo pip не запускають ніколи; відмова externally-managed-environment — це не поломка, а натяк створити віртуальне середовище.

Вводиться: 17. Віртуальні середовища і pip

pytest pytest

Інструмент, яким у Python запускають тести. Головна його ідея — не вигадувати власних перевірок, а зробити розумнішим той самий assert («стверджую, що це істина»): у момент падіння він показує обидві сторони порівняння.

Тести він знаходить сам, за іменами: файли test_*.py, у них функції з test_ на початку. Зворотний бік домовленості — помилився на літеру, і тест не почервоніє, він просто не існуватиме. Сам assert — не заміна перевіркам вхідних даних: python3 -O викидає всі assert із байткоду, тому для даних від користувача пиши raise ValueError.

Вводиться: 19. Тестування з pytest

латиницяR

REPL Read-Eval-Print Loop

Режим діалогу з інтерпретатором: запускається командою python3 без імені файлу й показує >>>. Цикл із чотирьох дій — прочитати рядок, обчислити, надрукувати результат, повторити.

У REPL значення виразу друкується саме собою, а у файлі — ні. Вийти можна exit() або Ctrl+D.

Вводиться: 02. Встановлення й перший запуск

__repr__ repr

Метод, який дає текстовий вигляд обʼєкта для того, хто налагоджує код: що це за обʼєкт і що в ньому лежить. Його бачать консоль, repr(x) і контейнери, коли друкують свій вміст.

Робиш один метод — роби саме __repr__: коли __str__ немає, Python бере для print() і f-рядків його, а зворотне неправда. Ідеал — рядок, який можна скопіювати назад у код.

Вводиться: 25. Класи й обʼєкти · 27. Магічні методи

латиницяS

self self

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

Забути self в означенні методу — найчастіша перша помилка: виклик падає з TypeError: ... takes 0 positional arguments but 1 was given, бо обʼєкт передався сам, а прийняти його нікому.

Вводиться: 25. Класи й обʼєкти

латиницяT

traceback traceback

Звіт, який Python друкує, коли виняток не спіймав ніхто: список кадрів, які виняток пролетів наскрізь. Останній рядок — діагноз (тип помилки й пояснення), рядки вище — маршрут, яким програма туди дійшла.

Курс не перекладає це слово: «трасування стека» довше й менш упізнаване, ніж напис, який читач бачить у себе на екрані. Читають traceback з кінця; якщо шапки Traceback (most recent call last) немає — значить, впало ще до старту, тобто це SyntaxError.

Вводиться: 02. Встановлення й перший запуск · 18. Помилки та винятки

латиницяY

yield yield

На відміну від return, який завершує роботу назавжди, yield віддає значення й ставить функцію на паузу: усі локальні змінні й точка зупинки лишаються жити всередині обʼєкта-генератора, і наступний крок продовжує з наступного рядка.

yield from джерело — скорочення для «віддавай назовні все, що дасть це джерело, поки воно не скінчиться».

Вводиться: 30. Ітератори й генератори