Python * args i ** kwargs (z przykładami)

W tym artykule dowiemy się o Pythonie * args i ** kwargs, ich zastosowaniu i funkcjach wraz z przykładami.

W programowaniu definiujemy funkcję, która tworzy kod wielokrotnego użytku, który wykonuje podobną operację. Aby wykonać tę operację, wywołujemy funkcję o określonej wartości, ta wartość jest nazywana w Pythonie argumentem funkcji.

Zalecamy przeczytanie Pythona Function and Python Function Arguments.

Załóżmy, że definiujemy funkcję dodawania 3 liczb.

Przykład 1: Funkcja dodawania 3 liczb

 def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)

Kiedy uruchomimy powyższy program, wynik będzie

 suma: 35

W powyższym programie mamy adder()funkcję z trzema argumentami x, y i z. Kiedy przekazujemy trzy wartości podczas wywoływania adder()funkcji, otrzymujemy sumę 3 liczb jako wynik.

Zobaczmy, co się stanie, gdy przekażemy w adder()funkcji więcej niż 3 argumenty .

 def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)

Kiedy uruchomimy powyższy program, wynik będzie

 TypeError: adder () przyjmuje 3 argumenty pozycyjne, ale podano 5

W powyższym programie przekazaliśmy do adder()funkcji 5 argumentów zamiast 3 argumentów, dzięki którym otrzymaliśmy TypeError.

Wprowadzenie do * args i ** kwargs w Pythonie

W Pythonie możemy przekazać zmienną liczbę argumentów do funkcji za pomocą specjalnych symboli. Istnieją dwa specjalne symbole:

  1. * argumenty (argumenty inne niż słowa kluczowe)
  2. ** kwargs (argumenty słów kluczowych)

Używamy * args i ** kwargs jako argumentów, gdy nie mamy pewności co do liczby argumentów do przekazania w funkcjach.

Python * args

Podobnie jak w powyższym przykładzie, nie jesteśmy pewni liczby argumentów, które można przekazać do funkcji. Python ma * argumenty, które pozwalają nam przekazywać zmienną liczbę argumentów niebędących słowami kluczowymi do funkcji.

W funkcji powinniśmy użyć gwiazdki *przed nazwą parametru, aby przekazać argumenty o zmiennej długości. Argumenty są przekazywane jako krotka, a te przekazane argumenty tworzą krotkę wewnątrz funkcji o takiej samej nazwie jak parametr z wyłączeniem gwiazdki *.

Przykład 2: Użycie * args do przekazania argumentów o zmiennej długości do funkcji

 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)

Kiedy uruchomimy powyższy program, wynik będzie

 Suma: 8 Suma: 22 Suma: 17

W powyższym programie użyliśmy * num jako parametru, który pozwala nam przekazać do adder()funkcji listę argumentów o zmiennej długości . Wewnątrz funkcji mamy pętlę, która dodaje przekazany argument i wyświetla wynik. Jako argument przekazaliśmy do funkcji 3 różne krotki o zmiennej długości.

Python ** kwargs

Python przekazuje do funkcji argument niebędący słowem kluczowym o zmiennej długości, używając * args, ale nie możemy tego użyć do przekazania argumentu słowa kluczowego. Na ten problem Python ma rozwiązanie o nazwie ** kwargs, które pozwala nam przekazywać do funkcji zmienną długość argumentów słów kluczowych.

W funkcji używamy podwójnej gwiazdki **przed nazwą parametru, aby oznaczyć ten typ argumentu. Argumenty są przekazywane jako słownik i te argumenty tworzą słownik wewnątrz funkcji o nazwie takiej samej jak parametr z wyłączeniem podwójnej gwiazdki **.

Przykład 3: Użycie ** kwargs do przekazania argumentów słowa kluczowego zmiennej do funkcji

 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)

Kiedy uruchomimy powyższy program, wynik będzie

 Typ danych argumentu: Imię to Sita Nazwisko to Sharma Wiek to 22 lata Telefon to 1234567890 Typ danych argumentu: Imię to Jan Nazwisko to Wood E-mail to [email protected] Kraj to Wakanda Wiek to 25 Telefon to 9876543210

W powyższym programie mamy funkcję intro()z ** data jako parametrem. Przekazaliśmy do funkcji dwa słowniki o zmiennej długości argumentów intro(). Mamy intro()funkcję pętli for, która działa na danych przekazanego słownika i wyświetla wartość słownika.

Rzeczy do zapamiętania:

  • * args i * kwargs są specjalnymi słowami kluczowymi, które pozwalają funkcji na przyjmowanie argumentów o zmiennej długości.
  • * args przekazuje zmienną liczbę nie-słów kluczowych z listy argumentów i na której można wykonać operację.
  • ** kwargs przekazuje zmienną liczbę słów kluczowych słownika do funkcji, na której można wykonać operację słownika.
  • * args i ** kwargs sprawiają, że funkcja jest elastyczna.

Interesujące artykuły...