Конспект і таймкоди
0:00
Оголошення, parameters, type hints і `return`
Функція оголошується через def, приймає named parameters і може повертати значення. Type hints на кшталт email: str та -> dict[str, str] покращують navigation і IDE checks, але самі по собі не валідовують input at runtime.
1:30
Повторне використання builder-функцій
build_login_payload(email, password) централізує структуру request body й прибирає дублювання inline dictionaries. Назва має описувати одну дію, а повернений об’єкт можна використати в кількох тестах. Секрети не слід виводити в logs навіть у допоміжних функціях.
build_user(email, role="viewer") дозволяє не передавати типову роль, але явно перевизначити її через role="admin". Default має бути безпечним і передбачуваним. Mutable defaults на кшталт [] або {} небезпечні, бо один об’єкт повторно використовується між викликами.
*locators збирає довільну кількість positional arguments у tuple, який можна перетворити на list. **headers збирає named arguments у dictionary. Ці форми корисні, коли кількість однотипних inputs справді змінна; для стабільного контракту явні parameters читабельніші.
5:02
Вкладені функції та scope
Функцію можна оголосити всередині іншої, тоді вона доступна лише в зовнішньому function body. Це інколи допомагає розкласти великий transform, але single-use nested helper не завжди покращує код. Якщо логіка потрібна в кількох місцях, її краще зробити звичайною module-level function із чітким контрактом.