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

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» ухудшает читаемость и усложняет контроль входных данных, а пустая сигнатура с глобальным контекстом — антипаттерн.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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