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()функция, получаваме сума от 3 числа като изход.

Нека видим какво се случва, когато предадем повече от 3 аргумента във 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. * аргументи (без аргументи на ключови думи)
  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()функцията два речника с променлива дължина на аргумента . Имаме intro()функция за цикъл вътре, която работи върху данните на предадения речник и отпечатва стойността на речника.

Неща, които трябва да запомните:

  • * args и * kwargs са специална ключова дума, която позволява на функцията да приема аргумент с променлива дължина.
  • * args предава променлив брой списъци с аргументи без ключови думи и за това коя операция на списъка може да бъде извършена.
  • ** kwargs предава речник с променлив брой речници на аргументи на ключови думи, за да функционира, върху която може да се извърши работа на речник.
  • * args и ** kwargs правят функцията гъвкава.

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