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:
- * argumenty (argumenty inne niż słowa kluczowe)
- ** 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.