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 подскажет развёрнутый ответ в реальном времени.