logo

*args och **kwargs i Python

I den här artikeln kommer vi att täcka vad ** (dubbelstjärna/asterisk) och * (stjärna/asterisk) gör för parametrar i Pytonorm , Här kommer vi också att täcka args och kwargs exempel i Python. Vi kan skicka ett variabelt antal argument till en funktion med hjälp av speciella symboler.

kasta en sträng till int java

Det finns två specialsymboler:



*args och **kwargs i Python

Specialsymboler som används för att skicka argument i Python:

  • *args (icke-sökordsargument)
  • **kwargs (sökordsargument)

Notera: Vi använder jokertecken eller * notation så här – *args ELLER **kwargs – som vår funktions argument när vi har tvivel om antalet argument vi ska skicka i en funktion.



Vad är Python *args?

Den speciella syntaxen *args i funktionsdefinitioner i Python används för att skicka ett variabelt antal argument till en funktion. Den används för att skicka en argumentlista med variabel längd utan nyckelord.

  • Syntaxen är att använda symbolen * för att ta in ett variabelt antal argument; enligt konventionen används det ofta med ordet args.
  • Vad *args låter dig göra är att ta in fler argument än antalet formella argument som du tidigare definierat. Med *args , kan valfritt antal extra argument kopplas till dina nuvarande formella parametrar (inklusive noll extra argument).
  • Till exempel vill vi göra en multipliceringsfunktion som tar valfritt antal argument och kan multiplicera dem alla tillsammans. Det kan göras med *args.
  • Genom att använda *, blir variabeln som vi associerar med * iterabel vilket betyder att du kan göra saker som att iterera över den, köra några högre ordningsfunktioner som karta och filter, etc.

Exempel 1:

Python-program för att illustrera *args för ett variabelt antal argument



pytonorm
def myFun(*argv): for arg in argv: print(arg) myFun('Hello', 'Welcome', 'to', 'techcodeview.com')>

Produktion:

Hello Welcome to techcodeview.com>

Exempel 2:

Python-program för att illustrera *args med ett första extra argument

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')>

Produktion:

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

Vad är Python **kwargs?

Den speciella syntaxen **kwargs i funktionsdefinitioner i Python används för att skicka en nyckelordsförd argumentlista med variabel längd. Vi använder namnet kwargs med dubbelstjärnan. Anledningen är att dubbelstjärnan tillåter oss att passera igenom nyckelordsargument (och valfritt antal av dem).

  • Ett nyckelordsargument är där du anger ett namn till variabeln när du skickar den till funktionen.
  • Man kan tänka på kwargs som en ordbok som mappar varje nyckelord till det värde som vi skickar bredvid det. Det är därför när vi itererar över kwargs det verkar inte finnas någon ordning som de skrevs ut i.

Exempel 1:

Python-program för att illustrera *kwargs för ett varierande antal nyckelordsargument. Här accepterar **kwargs nyckelordsargument med variabel längd som skickas av funktionsanropet. for first='Geeks' first är nyckeln och 'Geeks' är ett värde. i enkla ord, vad vi tilldelar är värde, och vem vi tilldelar är nyckeln.

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

Produktion:

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

Exempel 2:

Python-program för att illustrera **kwargs för ett variabelt antal nyckelordsargument med ett extra argument. Ändå, men en förändring är att vi skickar ett icke-sökordsargument som kan accepteras av positionsargument (arg1 i myFun). och sökordsargument som vi skickar är acceptabla av **kwargs. enkelt eller hur?

Pytonorm
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')>

Produktion:

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

Använder både *args och **kwargs i Python för att anropa en funktion

Exempel 1:

Här skickar vi *args och **kwargs som ett argument i myFun-funktionen. Att skicka *args till myFun betyder helt enkelt att vi skickar de positions- och variabellängdsargument som finns i args. så, Geeks passerar till arg1, för pass till arg2, och Geeks passerar till arg3. När vi skickar **kwargs som argument till myFun betyder det att den accepterar sökordsargument. Här är arg1 nyckeln och värdet är Geeks som skickas till arg1, och precis så för och Geeks passerar till arg2 respektive arg3. Efter att ha skickat all data skriver vi ut alla data i rader.

pytonorm
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)>

Produktion:

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

Exempel 2:

Här skickar vi *args och **kwargs som argument i myFun-funktionen. var 'nördar', 'för', 'nördar' skickas som *args, och första=nördar, mitt=för, sista=nördar överlämnas som **kwargs och tryckning i samma rad.

pytonorm
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')>

Produktion:

fördelningsrätt boolesk algebra
args: ('geeks', 'for', 'geeks') kwargs: {'first': 'Geeks', 'mid': 'for', 'last': 'Geeks'}>

Använda *args och **kwargs i Python för att ställa in värden på objektet

Exempel 1: använder Python *args

Pytonorm
# 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)>

Produktion:

red 250>

Exempel 2: använder Python **kwargs

Pytonorm
# 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)>

Produktion:

red 250>