Что такое *args, **kwargs?
В Python *args и **kwargs — это специальные конструкции, позволяющие функции принимать произвольное количество аргументов.
1. *args — произвольное количество позиционных аргументов
*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)) # 102. **kwargs — произвольное количество именованных аргументов
**kwargs — произвольное количество именованных аргументовСобирает все именованные аргументы в словарь.
Имя
kwargs— условное, можно назвать как угодно, но с**.
Можно обращаться по ключам:
3. Комбинация *args и **kwargs
*args и **kwargsМожно принимать и позиционные, и именованные аргументы вместе.
Порядок важен: обычные аргументы →
*args→ аргументы с дефолтом →**kwargs.
4. Распаковка при вызове функции
*распаковывает списки/кортежи в позиционные аргументы.**распаковывает словари в именованные аргументы.
💡 На собеседованиях любят спросить:
Почему
*argsидёт перед**kwargsв определении функции? → Потому что иначе Python не сможет понять, где заканчиваются позиционные и начинаются именованные аргументы.
Last updated
Was this helpful?