Easyargs

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

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

*args — собирает позиционные аргументы в tuple. **kwargs — собирает keyword аргументы в dict.

def f(*args, **kwargs):
    print(args)      # (1, 2)
    print(kwargs)    # {'x': 3, 'y': 4}

f(1, 2, x=3, y=4)

# Полная сигнатура
def f(a, b, *args, c=None, **kwargs):
    # a, b — позиционные, c — keyword-only (после *args)
    ...

# Распаковка при вызове
args = [1, 2]
kwargs = {'x': 3}
f(*args, **kwargs)   # эквивалентно f(1, 2, x=3)
  • Keyword-only (Python 3): def f(a, *, b, c) — b, c только как keyword;
  • Positional-only (Python 3.8): def f(a, b, /) — только позиционные;
  • Двойная ** распаковка (Python 3.5+): {**d1, **d2};

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.