Функция с переменным количеством аргументов в Python: *args и **kwargs
Не всегда заранее известно, сколько аргументов будет передано функции. В таких случаях в Python на помощь приходят *args и **kwargs, позволяющие передавать переменное количество аргументов. Сегодня мы расскажем, как именно они работают.
153К открытий158К показов
В этой статье мы расскажем, зачем нужны *args
и **kwargs
в Python и как их использовать.
В программировании, если нам нужно выполнять похожие действия, мы определяем функции для многоразового использования кода. Чтобы выполнить это действие, мы вызываем функцию с определённым значением — аргументом.
Предположим, у нас есть функция, которая складывает три числа:
После запуска будет выведено sum: 35
.
Во фрагменте кода выше у нас есть функция adder()
с тремя аргументами: x
, y
и z
. При передаче трёх значений этой функции на выходе мы получаем их сумму. Но что, если передать больше трёх аргументов в эту функцию?
Из-за того, что здесь мы передаём 5 аргументов, при запуске программы выводится ошибка TypeError: adder() takes 3 positional arguments but 5 were given
.
*args и **kwargs спешат на помощь
В Python можно передать переменное количество аргументов двумя способами:
*args
для неименованных аргументов;**kwargs
для именованных аргументов.
Мы используем *args
и **kwargs
в качестве аргумента, когда заранее не известно, сколько значений мы хотим передать функции.
*args
Как было сказано, *args
нужен, когда мы хотим передать неизвестное количество неименованных аргументов. Если поставить *
перед именем, это имя будет принимать не один аргумент, а несколько. Аргументы передаются как кортеж и доступны внутри функции под тем же именем, что и имя параметра, только без *
. Например:
В результате выполнения программы мы получим следующий результат:
Здесь мы использовали *nums
в качестве параметра, который позволяет передавать переменное количество аргументов в функцию adder()
. Внутри функции мы проходимся в цикле по этим аргументам, чтобы найти их сумму, и выводим результат.
**kwargs
По аналогии с *args
мы используем **kwargs
для передачи переменного количества именованных аргументов. Схоже с *args
, если поставить **
перед именем, это имя будет принимать любое количество именованных аргументов. Кортеж/словарь из нескольких переданных аргументов будет доступен под этим именем. Например:
При запуске программы мы увидим следующее:
В этом случае у нас есть функция intro()
с параметром **data
. В функцию мы передали два словаря разной длины. Затем внутри функции мы прошлись в цикле по словарям, чтобы вывести их содержимое.
Что нужно запомнить:
- *args и **kwargs — специальный синтаксис, позволяющий передавать в функцию переменное количество аргументов. При этом, совсем не обязательно использовать имена аргументов args и kwargs;*args используется для неименованных аргументов, с которыми можно работать как со списком;**kwargs используется для именованных аргументов, с которыми можно работать как со словарём;если вы хотите использовать и *args, и **kwargs, то это делается так: func(fargs, *args, **kwargs), порядок следования аргументов важен;
Другие материалы по Python можно посмотреть у нас на сайте.
153К открытий158К показов