Цей словник розвʼязує одну задачу: одне поняття — одна назва.
Курс писався тридцятьма пʼятьма темами поспіль, і термінологія в ньому складалась по ходу;
тут вона зведена до канону. Якщо в темі трапиться інше слово для того самого — правильним
вважається те, що стоїть тут заголовком.
Заголовок статті українською там, де український відповідник усталений і зрозумілий
(зріз, виняток, включення), і англійською там, де перекладати нема чого або переклад
вийшов би гіршим за оригінал (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. Ітератори й генератори