logo

*args i **kwargs w Pythonie

W tym artykule omówimy, co ** (podwójna gwiazdka/gwiazdka) i * (gwiazdka/gwiazdka) robią dla parametrów w Pyton , Tutaj również omówimy args i kwargs przykłady w Pythonie. Możemy przekazać zmienną liczbę argumentów do funkcji za pomocą specjalnych symboli.

Istnieją dwa symbole specjalne:



*args i **kwargs w Pythonie

Symbole specjalne używane do przekazywania argumentów w Pythonie:

  • *args (argumenty inne niż słowa kluczowe)
  • **kwargs (Argumenty słów kluczowych)

Notatka: Używamy symbolu wieloznacznego lub notacji * w ten sposób – *args OR **kwargs – jako argumentu naszej funkcji, gdy mamy wątpliwości co do liczby argumentów, które powinniśmy przekazać w funkcji.



Co to jest Python *args?

Specjalna składnia *argumenty w definicjach funkcji w Pythonie służy do przekazywania zmiennej liczby argumentów do funkcji. Służy do przekazywania listy argumentów o zmiennej długości, nie zawierającej słów kluczowych.

  • Składnia polega na użyciu symbolu * do przyjęcia zmiennej liczby argumentów; zgodnie z konwencją często jest używane ze słowem argumenty.
  • Co *argumenty pozwala na przyjęcie większej liczby argumentów niż liczba argumentów formalnych, które wcześniej zdefiniowałeś. Z *argumenty , do bieżących parametrów formalnych można dołączyć dowolną liczbę dodatkowych argumentów (w tym zero dodatkowych argumentów).
  • Na przykład chcemy utworzyć funkcję mnożenia, która przyjmuje dowolną liczbę argumentów i jest w stanie je wszystkie pomnożyć. Można to zrobić za pomocą *args.
  • Używając *, zmienna, którą kojarzymy z *, staje się iterowalna, co oznacza, że ​​możesz na przykład iterować po niej, uruchamiać funkcje wyższego rzędu, takie jak mapowanie i filtrowanie itp.

Przykład 1:

Program w Pythonie ilustrujący *args dla zmiennej liczby argumentów



wskazówki w c
pyton
def myFun(*argv): for arg in argv: print(arg) myFun('Hello', 'Welcome', 'to', 'techcodeview.com')>

Wyjście:

Hello Welcome to techcodeview.com>

Przykład 2:

Program w języku Python ilustrujący *args z pierwszym dodatkowym argumentem

Python3
def myFun(arg1, *argv): print('First argument :', arg1) for arg in argv: print('Next argument through *argv :', arg) myFun('Hello', 'Welcome', 'to', 'techcodeview.com')>

Wyjście:

First argument : Hello Next argument through *argv : Welcome Next argument through *argv : to Next argument through *argv : techcodeview.com>

Co to jest Python **kwargs?

Specjalna składnia **kwargs w definicjach funkcji w Pythonie służy do przekazywania listy argumentów o zmiennej długości i zawierającej słowa kluczowe. Używamy nazwy kwargs z podwójną gwiazdą. Powodem jest to, że podwójna gwiazda pozwala nam przechodzić przez argumenty słów kluczowych (i dowolną ich liczbę).

  • Argument słowa kluczowego polega na tym, że podajesz nazwę zmiennej podczas przekazywania jej do funkcji.
  • Można pomyśleć o kwargs jako słownik, który odwzorowuje każde słowo kluczowe na wartość, którą obok niego przekazujemy. Dlatego, gdy iterujemy po kwargs wydaje się, że nie ma żadnej kolejności, w jakiej zostały wydrukowane.

Przykład 1:

Program w języku Python ilustrujący *kwargs dla zmiennej liczby argumentów słów kluczowych. Tutaj **kwargs akceptuje argument o zmiennej długości ze słowami kluczowymi przekazywany przez wywołanie funkcji. for First=„Geeks” jest kluczem, a „Geeks” to wartość. w prostych słowach to, co przypisujemy, jest wartością i komu przypisujemy, jest kluczowe.

Pyton
def myFun(**kwargs): for key, value in kwargs.items(): print('%s == %s' % (key, value)) # Driver code myFun(first='Geeks', mid='for', last='Geeks')>

Wyjście:

first == Geeks mid == for last == Geeks>

Przykład 2:

Program w języku Python ilustrujący **kwargs dla zmiennej liczby argumentów słów kluczowych z jednym dodatkowym argumentem. Wszystko to samo, ale jedną zmianą jest to, że przekazujemy argument inny niż słowo kluczowe, który można zaakceptować za pomocą argumentu pozycyjnego (arg1 w myFun). a przekazywane przez nas argumenty słów kluczowych są akceptowane przez **kwargs. proste, prawda?

Pyton
def myFun(arg1, **kwargs): for key, value in kwargs.items(): print('%s == %s' % (key, value)) # Driver code myFun('Hi', first='Geeks', mid='for', last='Geeks')>

Wyjście:

first == Geeks mid == for last == Geeks>

Używanie zarówno *args, jak i **kwargs w Pythonie do wywołania funkcji

Przykład 1:

Tutaj przekazujemy *args i **kwargs jako argument w funkcji myFun. Przekazanie *args do myFun oznacza po prostu, że przekazujemy argumenty pozycyjne i o zmiennej długości, które są zawarte w args. więc Geekowie przechodzą do arg1, aby przejść do arg2, a Geekowie przechodzą do arg3. Kiedy przekazujemy **kwargs jako argument do funkcji myFun, oznacza to, że akceptuje ona argumenty oparte na słowach kluczowych. Tutaj arg1 jest kluczem, a wartość to Geeks, która jest przekazywana do arg1 i tak po prostu for i Geeks przekazują odpowiednio do arg2 i arg3. Po przekazaniu wszystkich danych drukujemy wszystkie dane w wierszach.

pyton
def myFun(arg1, arg2, arg3): print('arg1:', arg1) print('arg2:', arg2) print('arg3:', arg3) # Now we can use *args or **kwargs to # pass arguments to this function : args = ('Geeks', 'for', 'Geeks') myFun(*args) kwargs = {'arg1': 'Geeks', 'arg2': 'for', 'arg3': 'Geeks'} myFun(**kwargs)>

Wyjście:

arg1: Geeks arg2: for arg3: Geeks arg1: Geeks arg2: for arg3: Geeks>

Przykład 2:

Tutaj przekazujemy *args i **kwargs jako argument w funkcji myFun. Gdzie „geeki”, „dla”, „geeki” jest przekazywana jako *args i First=Geeks, mid=for, last=Geeks jest przekazywany jako **kwargs i drukowanie w tej samej linii.

pyton
def myFun(*args, **kwargs): print('args: ', args) print('kwargs: ', kwargs) # Now we can use both *args ,**kwargs # to pass arguments to this function : myFun('geeks', 'for', 'geeks', first='Geeks', mid='for', last='Geeks')>

Wyjście:

args: ('geeks', 'for', 'geeks') kwargs: {'first': 'Geeks', 'mid': 'for', 'last': 'Geeks'}>

Używanie *args i **kwargs w Pythonie do ustawiania wartości obiektu

Przykład 1: użycie Pythona *args

Pyton
# defining car class class Car(): # args receives unlimited no. of arguments as an array def __init__(self, *args): # access args index like array does self.speed = args[0] self.color = args[1] # creating objects of car class audi = Car(200, 'red') bmw = Car(250, 'black') mb = Car(190, 'white') # printing the color and speed of the cars print(audi.color) print(bmw.speed)>

Wyjście:

red 250>

Przykład 2: użycie Pythona **kwargs

Pyton
# defining car class class Car(): # args receives unlimited no. of arguments as an array def __init__(self, **kwargs): # access args index like array does self.speed = kwargs['s'] self.color = kwargs['c'] # creating objects of car class audi = Car(s=200, c='red') bmw = Car(s=250, c='black') mb = Car(s=190, c='white') # printing the color and speed of cars print(audi.color) print(bmw.speed)>

Wyjście:

red 250>