Python * args и ** kwargs (с примерами)

В этой статье мы узнаем о 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 мы можем передавать переменное количество аргументов функции, используя специальные символы. Есть два специальных символа:

  1. * args (аргументы, не связанные с ключевым словом)
  2. ** 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 делают функцию гибкой.

Интересные статьи...