В этой статье мы узнаем о Python * args и ** kwargs, их использовании и функциях с примерами.
В программировании мы определяем функцию для создания повторно используемого кода, который выполняет аналогичную операцию. Чтобы выполнить эту операцию, мы вызываем функцию с определенным значением, это значение называется аргументом функции в Python.
Мы рекомендуем вам прочитать функции Python и аргументы функций Python.
Допустим, мы определяем функцию сложения 3-х чисел.
Пример 1: функция сложения 3 чисел
def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)
Когда мы запустим вышеуказанную программу, вывод будет
сумма: 35
В приведенной выше программе у нас есть adder()
функция с тремя аргументами x, y и z. Когда мы передаем три значения при вызове adder()
функции, на выходе мы получаем сумму трех чисел.
Давайте посмотрим, что произойдет, если мы передадим в adder()
функцию более трех аргументов .
def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)
Когда мы запустим вышеуказанную программу, вывод будет
TypeError: adder () принимает 3 позиционных аргумента, но передано 5
В приведенной выше программе мы передали функции 5 аргументов adder()
вместо 3 аргументов, из-за которых мы получили TypeError
.
Введение в * args и ** kwargs в Python
В Python мы можем передавать переменное количество аргументов функции, используя специальные символы. Есть два специальных символа:
- * args (аргументы, не связанные с ключевым словом)
- ** kwargs (аргументы ключевых слов)
Мы используем * args и ** kwargs в качестве аргумента, когда мы не уверены в количестве аргументов, передаваемых в функции.
Python * аргументы
Как и в приведенном выше примере, мы не уверены в количестве аргументов, которые можно передать функции. Python имеет * args, которые позволяют нам передавать в функцию переменное количество аргументов, не являющихся ключевыми словами.
В функции мы должны использовать звездочку *
перед именем параметра для передачи аргументов переменной длины. Аргументы передаются как кортеж, и эти переданные аргументы создают кортеж внутри функции с тем же именем, что и параметр, за исключением звездочки *
.
Пример 2: Использование * args для передачи аргументов переменной длины в функцию
def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6)
Когда мы запустим вышеуказанную программу, вывод будет
Сумма: 8 Сумма: 22 Сумма: 17
В приведенной выше программе мы использовали * num в качестве параметра, который позволяет нам передавать в adder()
функцию список аргументов переменной длины . Внутри функции у нас есть цикл, который добавляет переданный аргумент и выводит результат. Мы передали 3 разных кортежа переменной длины в качестве аргумента функции.
Python ** kwargs
Python передает в функцию аргумент переменной длины без ключевого слова, используя * args, но мы не можем использовать это для передачи аргумента ключевого слова. Для этой проблемы у Python есть решение под названием ** kwargs, которое позволяет нам передавать переменную длину аргументов ключевого слова функции.
В функции мы используем двойную звездочку **
перед именем параметра, чтобы обозначить этот тип аргумента. Аргументы передаются в виде словаря, и эти аргументы создают словарь внутри функции с именем, совпадающим с именем параметра, за исключением двойной звездочки **
.
Пример 3: Использование ** kwargs для передачи аргументов ключевого слова переменной в функцию
def intro(**data): print("Data type of argument:",type(data)) for key, value in data.items(): print("() is ()".format(key,value)) intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890) intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)
Когда мы запустим вышеуказанную программу, вывод будет
Тип данных аргумента: Имя - Сита Фамилия - Шарма Возраст - 22 Телефон: 1234567890 Тип данных аргумента: Имя - Джон Фамилия - Дерево Электронная почта: [email protected] Страна - Ваканда Возраст - 25 Телефон: 9876543210
В приведенной выше программе у нас есть функция intro()
с ** данными в качестве параметра. Мы передали в intro()
функцию два словаря с переменной длиной аргумента . У нас есть внутри цикла for intro()
функция, которая работает с данными переданного словаря и печатает значение словаря.
То, что нужно запомнить:
- * args и * kwargs - это специальные ключевые слова, которые позволяют функции принимать аргументы переменной длины.
- * args передает переменное количество аргументов без ключевого слова, а также то, над какими операциями списка можно выполнить.
- ** kwargs передает переменное количество словаря аргументов ключевого слова в функцию, над которой может выполняться операция словаря.
- * args и ** kwargs делают функцию гибкой.