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

Adef track_event(**kwargs): ... со всеми полями в словаре, включая обязательные
Bdef track_event(event_name, user_id, timestamp, **kwargs): ... с явными ключевыми
Cdef track_event(): ... со сборкой полей внутри тела через глобальный контекст
Ddef track_event(event_name, *args, **kwargs): ... с обязательным только именем
Правильный ответ. Ключевые обязательные параметры лучше делать явными, а «опциональные метаданные» собирать через **kwargs.

Разбор

Если обязательные параметры важны для понимания кода, их стоит прописать явно в сигнатуре: так легче читать, есть автодополнение в IDE, меньше ошибок при вызове. При этом дополнительные редкие поля удобно принимать через **kwargs как словарь метаданных. Полностью «всё через **kwargs» ухудшает читаемость и усложняет контроль входных данных, а пустая сигнатура с глобальным контекстом — антипаттерн.

Проверь себя · 1/3разбор после ответа
Дана функция def add(a, b, c): return a + b + c и список nums = [1, 2, 3]. Что вернёт вызов add(*nums)?
Тренировать Python в Telegram

Ещё вопросы по теме «Функции и аргументы»