Powrót do bloga

Używanie parametrów *args i **kwargs w swoim kodzie: samouczek Pythona 3

Używanie parametrów *args i **kwargs w swoim kodzie: samouczek Pythona 3

Wprowadzenie

Python jest jednym z najpopularniejszych języków programowania na świecie. W Pythonie parametry są częścią definicji funkcji. Umożliwiają one określenie określonych argumentów dla funkcji. Argument może zostać zaakceptowany i zastosowany przez funkcję.

Jednak w momencie pisania kodu nie jest możliwe przewidzenie, jakie dokładnie przypadki użycia mogą zostać zaimplementowane przy użyciu Twojego kodu. W związku z tym, ze względu na przyszłych programistów i użytkowników Twojego programu, zaleca się przekazywanie do funkcji zmiennej liczby argumentów. Aby to zrobić, musisz użyć specjalnych parametrów. Są to *args oraz **kwargs. W tym samouczku dowiemy się wszystkiego o parametrach *args i **kwargs w Pythonie. Dowiemy się również, jak porządkować argumenty i jak stosować je w wywołaniach funkcji.

Wymagania wstępne

Aby móc postępować zgodnie z krokami opisanymi w samouczku, musisz przygotować kilka rzeczy. Po pierwsze, musisz mieć zainstalowanego Pythona 3 na swoim serwerze wraz z działającym środowiskiem programistycznym. Musisz mieć również zainstalowany program dla swojego konkretnego systemu operacyjnego (Ubuntu, CentOS, Debian itp.).

Co to jest *args i jak to działa?

Zacznijmy od zrozumienia, jak działa *args . Wersja parametru z pojedynczą gwiazdką służy do przesyłania do funkcji list argumentów o zmiennej długości bez słów kluczowych. Pamiętaj, że gwiazdka jest najważniejszym elementem tego parametru.

Aby lepiej to zrozumieć, rozważmy przykład. Poniżej znajduje się typowa funkcja, którą możesz znaleźć w swoim kodzie, używająca dwóch argumentów:

Jak widać, naszymi argumentami w powyższej funkcji są x oraz y. Podczas wywoływania funkcji użyjesz liczb odpowiadających x oraz y. Załóżmy, że przekazujemy liczby całkowite 5 i 4 dla x and y odpowiednio:

Teraz możemy uruchomić kod:

Otrzymany wynik będzie następujący:

Wynik pokazuje, że liczby całkowite 5 i 4 zostały pomnożone. Oznacza to, że funkcja multiply(x, y) zadziałała.

Załóżmy teraz, że chcemy ostatecznie pomnożyć trzy liczby zamiast tylko dwóch. Niestety, dodanie dodatkowej liczby do powyższej funkcji spowoduje błąd taki jak ten:

Dlatego, jeśli przypuszczasz, że w przyszłości może zajść potrzeba dodania kolejnych argumentów, zastosuj dla własnej wygody parametr *args. Możesz go użyć w następujący sposób:

Po prostu zastąpiliśmy parametry funkcji x i y parametrem *args. Uruchomienie tego kodu da wynik mnożenia dla każdego wywołania funkcji w następujący sposób:

Z tego względu *args jest idealny do użycia, gdy chcesz przesłać do funkcji listy argumentów o zmiennej długości. Dzięki jego możliwościom możesz przekazać do wywołań funkcji tyle argumentów, ile chcesz. W związku z tym parametr ten pozwala na budowanie bardziej elastycznego kodu, który może przyjmować do funkcji znaczną liczbę zmiennych argumentów bez słów kluczowych.

Co to jest **kwargs i jak to działa?

Następnie mamy wersję parametrów z podwójną gwiazdką, czyli **kwargs. W przeciwieństwie do poprzedniej formy, ten parametr umożliwia przekazywanie do funkcji słowników argumentów o zmiennej długości z nazwanymi słowami kluczowymi. Podobnie jak *args, podwójne gwiazdki są najważniejszym elementem parametru.

Podobnie jak w poprzedniej sekcji, możesz dodać tyle argumentów, ile chcesz. Różnica polega na tym, że musisz przypisać słowa kluczowe. Aby lepiej to zrozumieć, rozważ następujący przykład. Tutaj zaczniemy od wypisania **kwargs argumentów, które chcemy przekazać do funkcji:

Teraz wywołajmy funkcję. Jak widać, dodaliśmy argumenty nazwane (słów kluczowych):

Uruchomienie programu w tym momencie pokaże następujące dane wyjściowe:

Istnieje jednak możliwość, że Twój słownikowy typ danych jest nieuporządkowany. Zależy to w dużej mierze od używanej wersji Pythona 3. Na przykład każda wersja nowsza niż Python 3.6 zwraca pary klucz-wartość w kolejności. Każda wcześniejsza wersja pokaże wynik w losowej kolejności. Słownik, który utworzysz, będzie się nazywał kwargs. Pamiętaj, że możesz go używać i modyfikować jak każdego innego słownika w systemie. Zobaczmy, jak możesz lepiej wykorzystać i zastosować parametr **kwargs w praktyce.

W poniższym przykładzie spróbujemy stworzyć nową funkcję, która przywita słownik z imionami. Nasz przykładowy słownik będzie zawierał dwa imiona:

Uruchomienie programu da następujący wynik:

Podobnie jak w poprzednim przykładzie, słowniki mogą wydawać się nieuporządkowane. W związku z tym kolejność imion Casey i Sammy może być w niektórych przypadkach odwrócona.

Następnie przekażemy do funkcji dodatkowe argumenty. Udowodni to, że możesz sprawić, by **kwargs akceptował dowolną liczbę argumentów:

Uruchomienie programu pokaże następujący wynik:

Ten wynik również może być nieuporządkowany. Niezależnie od tego, przykłady te pokazują, że **kwargs daje Twojemu programowi elastyczność w używaniu wielu argumentów nazwanych.

Jak porządkować argumenty

Ważne jest, aby pamiętać o ustalonej kolejności podczas porządkowania argumentów w funkcji lub wywołaniu funkcji. Jest ona następująca:

  1. Formalne argumenty pozycyjne

  2. *args

  3. Argumenty nazwane

  4. **kwargs

Załóżmy, że używasz *args oraz **kwargs z jawnymi parametrami pozycyjnymi. Oznacza to, że Twoja funkcja będzie wyglądać tak:

Z drugiej strony, użycie tych parametrów z nazwanymi parametrami kluczowymi nada Twojej funkcji następującą ogólną strukturę:

Niezastosowanie się do ustalonej kolejności spowoduje błąd składniowy podczas uruchamiania kodu. Dlatego najlepiej jest unikać popełniania tego błędu na samym początku.

Jak używać *args i **kwargs w wywołaniach funkcji

Na koniec pokażemy, jak używać obu tych parametrów do przekazywania argumentów do funkcji. Zaczniemy od przykładu pokazującego *args:

W tej funkcji znajdują się trzy parametry: arg_1, arg_2, oraz arg_3. Musisz utworzyć zmienną i przypisać jej obiekt iterowalny. W tym przypadku będzie to krotka. Następnie możesz przekazać tę zmienną do funkcji, używając składni z gwiazdką.

Zaobserwuj dane wyjściowe po uruchomieniu programu za pomocą polecenia python some_args.py :

Możliwe jest również zmodyfikowanie programu tak, aby używał iterowalnego typu danych listy z inną nazwą zmiennej. Poniższy kod łączy *args z parametrem nazwanym:

Po uruchomieniu programu wynik będzie następujący:

Z drugiej strony, możesz zastosować argumenty nazwane za pomocą **kwargs. Upewnij się, że utworzysz zmienną, która jest słownikiem. Powinna mieć 2 pary klucz-wartość. Oto jak przekażemy tę zmienną do funkcji z 3 argumentami:

Użyj ponownie polecenia python some_kwargs.py , aby uruchomić program:

Podsumowanie

Po ukończeniu tego samouczka powinieneś dobrze orientować się w tym, czym są *args oraz **kwargs i jak działają. Możesz teraz zastosować te parametry we własnym kodzie, aby uczynić swój program elastycznym dla przyszłych użytkowników. Są one idealne w sytuacjach, gdy nie wiesz, ile argumentów może zostać użytych. Pamiętaj tylko, aby uważać na kluczowe elementy funkcji i parametrów.

Na koniec, oto więcej zasobów z naszego bloga które pomogą Ci skutecznie pracować z językiem Python:

Miłego programowania!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.