Получить доступ

Что такое *args и **kwargs?

JuniorФункции
Ещё спрашивают так:
  • Зачем нужны звёздочки в аргументах функции?
  • Как передать в функцию произвольное число аргументов?
Коротко

*args собирает лишние позиционные аргументы в кортеж, **kwargs — лишние именованные в словарь.

  • Имена условные, важны * и **
  • При вызове те же звёздочки распаковывают: f(*lst, **opts)

А ещё Покажите keyword-only после * и positional-only до /

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

В определении функции:

  • *args принимает все позиционные аргументы, не попавшие в обычные параметры, — получается кортеж;
  • **kwargs принимает все именованные аргументы, которым нет параметра, — получается словарь.

Порядок в сигнатуре: обычные параметры, *args, параметры только по имени, **kwargs. Всё, что стоит после *args (или после одиночной *), можно передать только по имени. Всё, что стоит до / (Python 3.8+), — только позиционно.

При вызове звёздочки работают наоборот: f(*[1, 2]) раскладывает список в позиционные аргументы, f(**{"a": 1}) — словарь в именованные.

Типичные применения: декораторы и обёртки, которые передают аргументы дальше без изменений (return func(*args, **kwargs)); функции с переменным числом аргументов, как print; расширяемые конфигурации.

Пример

def show(first, *args, sep=", ", **kwargs):
    print(first, args, sep, kwargs)

show(1, 2, 3, sep=";", debug=True)
# 1 (2, 3) ; {'debug': True}

def point(x, y, /, *, scale=1):   # x, y — только позиционно; scale — только по имени
    return x * scale, y * scale

nums = [3, 4]
point(*nums, scale=2)            # (6, 8)

Что хотят услышать

  • args — кортеж, kwargs — словарь.
  • Звёздочки при вызове — распаковка.
  • Применение в декораторах.
  • Знание keyword-only и positional-only параметров — плюс.

Частые ошибки

  • Думать, что args — список.
  • Ставить **kwargs перед *args.

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем