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

В Python *args и **kwargs — это специальные конструкции, позволяющие функции принимать произвольное количество аргументов.


1. *args — произвольное количество позиционных аргументов

  • Собирает все позиционные аргументы в кортеж.

  • Имя args условное — можно написать *values, *items и т.п., но звёздочка обязательна.

def my_func(*args):
    print(args)

my_func(1, 2, 3)  
# (1, 2, 3)

Можно итерироваться:

def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3, 4))  # 10

2. **kwargs — произвольное количество именованных аргументов

  • Собирает все именованные аргументы в словарь.

  • Имя kwargs — условное, можно назвать как угодно, но с **.

Можно обращаться по ключам:


3. Комбинация *args и **kwargs

  • Можно принимать и позиционные, и именованные аргументы вместе.

  • Порядок важен: обычные аргументы → *args → аргументы с дефолтом → **kwargs.


4. Распаковка при вызове функции

  • * распаковывает списки/кортежи в позиционные аргументы.

  • ** распаковывает словари в именованные аргументы.


💡 На собеседованиях любят спросить:

  • Почему *args идёт перед **kwargs в определении функции? → Потому что иначе Python не сможет понять, где заканчиваются позиционные и начинаются именованные аргументы.

Last updated

Was this helpful?