Вы пишете функцию среднего значения, и в коде чаще всего уже есть список values (например, из данных). Какой интерфейс обычно более универсален и читаем?

Adef mean(*values): ...: готовую коллекцию приходится распаковывать через *list
Bdef mean(**values): ...: интерфейс принимает пары ключ-значение, не последовательность
Cdef mean(values): ...: один параметр-итерируемый, который принимает list или tuple
Ddef mean(items, weights=None): ...: два параметра, второй для весовых коэффициентов
Правильный ответ. Если вход чаще уже собран в коллекцию, лучше принимать один параметр-итерируемый, чем заставлять распаковывать в *args.

Разбор

Сигнатура def mean(values): ... позволяет передавать список, кортеж или любой другой итерируемый объект напрямую (например, mean(values)), без распаковки. Вариант def mean(*values): ... удобен, когда вызывают как mean(1, 2, 3), но хуже подходит для данных, которые уже собраны в коллекции — приходится писать mean(*values). Двойные звёздочки **values принимают только пары ключ-значение и для чисел не годятся. При проектировании функций для аналитики чаще выигрывает явный параметр values.

Проверь себя · 1/3разбор после ответа
Дана функция def discount(total): if total >= 100: return 10; return 0. Что вернет вызов discount(120)?
Тренировать Python в Telegram

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