Олег Марков
Передача аргументов через args и kwargs в Python
Введение
В Python функции могут принимать разное количество аргументов. Для таких случаев применяются специальные конструкции *args и **kwargs. Они позволяют создавать гибкие функции, которые работают с произвольным числом позиционных и именованных параметров.
В этой статье мы разберемся, как правильно использовать *args и **kwargs в Python, какие правила их применения и типичные сценарии использования.
Если вы хотите детальнее изучить работу с функциями и аргументами в Python — приходите на наш курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажеры для практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Использование *args
*args позволяет передавать произвольное количество позиционных аргументов:
def greet(*names):
for name in names:
print(f"Hello, {name}")
greet("Alice", "Bob", "Charlie")
# Hello, Alice
# Hello, Bob
# Hello, Charlie*args собирает все дополнительные позиционные аргументы в кортеж.
Использование **kwargs
**kwargs собирает все именованные аргументы в словарь:
def print_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, city="London")
# name: Alice
# age: 30
# city: LondonКомбинация *args и **kwargs
Можно использовать одновременно:
def greet_people(*names, **info):
for name in names:
print(f"Hello, {name}")
for key, value in info.items():
print(f"{key}: {value}")
greet_people("Alice", "Bob", city="Paris", country="France")Правило: *args идёт перед **kwargs при определении функции.
Передача аргументов из списков и словарей
Списки и кортежи можно распаковать в позиционные аргументы, словари — в именованные:
names = ["Alice", "Bob"]
info = {"city": "Paris", "country": "France"}
greet_people(*names, **info)Частые ошибки
- Использование
*argsили**kwargsв неправильном порядке. - Пытаться передать
**kwargsбез словаря. - Ошибки в именах ключей при передаче словаря через
**.
Часто задаваемые вопросы
Можно ли передавать обязательные аргументы вместе с *args и kwargs? Да, они идут первыми перед
*args.Можно ли передать пустые *args и kwargs? Да, функция корректно примет пустые кортеж и словарь.
Что происходит, если имя в kwargs совпадает с именем обычного аргумента? Произойдет ошибка
TypeError, так как аргумент будет передан дважды.
Заключение
Использование *args и **kwargs делает функции гибкими и универсальными. Они позволяют писать функции, которые легко адаптируются к разному количеству входных данных и упрощают обработку динамических параметров.
Для системного изучения функций и работы с аргументами рекомендую пройти курс Основы Python. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Python прямо сегодня.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

Основы Python
Антон Ларичев
Nest.js с нуля
Антон Ларичев