Args und Kwargs in Python verstehen

In diesem Tutorial konzentriere ich mich auf Argumente (* args) und Schlüsselwortargumente (* Kwargs) in Python.

Ich werde Ihnen beibringen, was Argumente und Kwargs sind und, was am wichtigsten ist, wie man sie benutzt - das ist, wie Sie eine unbegrenzte Anzahl von Argumenten und Schlüsselwortargumenten in Funktionen aufnehmen können.

Was sind Args??

* args werden verwendet, um zu übergeben Nicht-Schlüsselwort Argumente. Beispiele für Nicht-SchlüsselwörterArgumente sind Spaß (3,4), Spaß ("Foo", "Bar").

* args werden normalerweise als Maßnahme verwendet, um zu verhindern, dass das Programm abstürzt, wenn wir nicht wissen, wie viele Argumente an die Funktion übergeben werden. Dies wird in C ++ sowie in anderen Programmiersprachen verwendet.

Was sind Kwargs??

** Kwargs ist ein Wörterbuch mit Schlüsselwortargumenten. Das ** erlaubt uns, eine beliebige Anzahl von Schlüsselwortargumenten zu übergeben. Ein Schlüsselwortargument ist im Wesentlichen ein Wörterbuch.

Ein Beispiel für ein StichwortArgument ist Spaß (foo = 2, bar = 7).

** Kwargs sind einfach so * args außer Sie deklarieren die Variablen und den Betrag innerhalb der Funktion Argumente.

Wo man Args und Kwargs benutzt

Args und Kwargs sind nützlich, wenn Sie:

  • Reduzieren Sie den Code.
  • Machen Sie Ihren Code lesbar.
  • Verwenden Sie Ihren Code erneut

Verwenden von Args und Kwargs in Funktionen

Schauen wir uns an, wie Kwargs und Argumente in Funktionen verwendet werden.

Args

Die folgende Funktion enthält drei Argumente. Die drei Argumente wurden explizit definiert, sodass mehr oder weniger Fehler im Programm verursachen.

def add (a, b, c): print (a + b + c) print add (2,3,4) 

Lassen Sie uns die Funktion ausführen. Die Funktion fügt die drei Zahlen hinzu und liefert folgende Ausgabe:

Ausgabe 9

Was wäre, wenn wir vier Argumente anstelle der erforderlichen drei in der Funktion übergeben würden? Wir erhalten eine Fehlermeldung wie unten gezeigt.

Dies liegt daran, dass in der Funktion nur drei Parameter definiert wurden. Beim Aufruf der Funktion haben wir jedoch vier Positionsargumente übergeben.

def add (a, b, c): print (a + b + c) print add (2,3,4,5) 
Output TypeError: add () benötigt 3 Positionsargumente, aber 4 wurden angegeben 

Im zweiten Beispiel weiter unten * ist für Nicht-Schlüsselwort Argumente und wird in die Funktion übergeben. Anstatt definierte Argumente zu haben, ersetzen wir ein, b und c mit einem einzigen Parameter (* args).

Beachten Sie, wie die Verwendung von * args macht es einfach, eine beliebige Anzahl von Argumenten zu verwenden, ohne Ihren Code ändern zu müssen. * args Bieten Sie Ihrem Code mehr Flexibilität, da Sie in der Zukunft beliebig viele Argumente verwenden können.

def add (* args): total = 0 für arg in args: total + = arg Drucksumme 
Szenario 1 print add (1,2,5) Ausgabe 8 
Szenario 2 Druck hinzufügen (1,2,5,6) Ausgabe 14 
Szenario 3 print add (1,2,5,8) Ausgabe 16

Mehr Beispiele

Erstellen Sie eine einfache Funktion wie gezeigt:

def func (* args): # * args bedeutet für alle Argumente, die Sie in sich aufnehmen, sie werden alle für arg in args: print arg einfangen 

Testen Sie die Funktion mit einer Kombination aus ganzen Zahlen und Strings:

def func (* args): # * args bedeutet für alle Argumente, die Sie aufgreifen, es werden sie alle für arg in args gefunden: print arg print func (11,3,4,5, "tuts") 
Ausgang 11 3 4 5 Tuts

Was wäre, wenn wir eine Liste als Argument übergeben würden? Testen Sie die Funktion mit einer Liste, indem Sie die vorherigen Argumente durch eine Liste ersetzen,  L = [11,3,4,5, "Tuts].

def func (* args): # * args bedeutet für alle Argumente, die Sie in sich aufnehmen, es werden sie alle für arg in args gefunden: print arg l = [11,3,4,5, "tuts"] print func (l ) 
Dies gibt die Liste als Ganzes aus. Dies liegt daran, dass die Liste als ein Element interpretiert wird. Ausgabe [11,3,4,5, "Tuts]

Im obigen Beispiel können Sie auch verwenden * args Entpacken Sie Argumente, die sich bereits in einer Liste oder einem Tupel befinden, sodass alle Elemente in der Liste als verschiedene Parameter übergeben werden.

Mit der gleichen Funktion:

def func (* args): # * args bedeutet für alle Argumente, die Sie in sich aufnehmen, sie werden alle für arg in args einfangen: print (arg) l = [11,3,4,5, "tuts"] print ( func (* l)) 
Das * entpackt die Liste und gibt jedes einzelne Listenelement aus. Ausgang 11 3 4 5 Tuts

Kwargs

Mit Kwargs können Sie Schlüsselwortargumente an eine Funktion übergeben. Sie werden verwendet, wenn Sie sich nicht sicher sind, wie viele Schlüsselwortargumente in der Funktion übergeben werden.

Schreibe eine Funktion my_func und übergeben (x = 10, y = 20) als Schlüsselwort Argumente wie unten gezeigt:

def my_func (x = 10, y = 20): x, y drucken
Dies gibt die Werte für x und y aus. Ausgabe 10,20

Kwargs können zum Entpacken von Wörterbuchschlüssel und Wertepaaren verwendet werden. Dies geschieht mit der doppelten Sternchen-Notation (**). Es ist wichtig zu wissen, dass jeder Schlüssel mit einem Wert abgeglichen werden muss.

Hier ist ein typisches Beispiel dafür, wie es gemacht wird. Die folgende Funktion nimmt Länder als Schlüssel und ihre Hauptstädte als Werte an. Dann druckt er eine Anweisung aus, die die Kwargs durchläuft, und ordnet jedes Schlüsselwort dem ihm zugewiesenen Wert zu.

def capital_cities (** kwargs): # initialisiert eine leere Liste zum Speichern des Ergebnisses result = [] für key, Wert in kwargs.items (): result.append ("Die Hauptstadt von  ist  .format (key.) , value) Ergebnis zurückgeben

Sie können die Funktion mit beliebigen Argumenten aufrufen.

def capital_cities (** kwargs): # initialisiert eine leere Liste zum Speichern des Ergebnisses result = [] für key, Wert in kwargs.items (): result.append ("Die Hauptstadt von  ist  .format (key.) Ergebnis) print capital_city (China = "Peking", Kairo = "Ägypten", Rom = "Italien"))
Ausgabe ['Die Hauptstadt Chinas ist Peking', 'Die Hauptstadt Kairos ist Ägypten', 'Die Hauptstadt Roms ist Italien'] 

Nehmen wir für ein komplexeres Beispiel an, wir haben ein Modell für einen Kunden, das ungefähr so ​​aussieht:

Klasse Customer (models.Model): first_name = models.CharField (max_length = 100, null = True) last_name = models.CharField (max_length = 100) Benutzername = models.Charfield (max_length = 100) email = models.EmailField (max_length = 100) Kennwort = Modelle.CharField (max_length = 100)

Sie können kwargs verwenden, um sowohl Dateneingaben als auch Datenabfragen von Modellobjekten auszuführen. Schreiben wir eine Funktionsansicht, um einen neuen Kunden anzulegen.

kwargs = "first_name": "John", "last_name": "Doe", "username": "johndoe", "email" [email protected] "," password ":" 1234 " new_user = User (* * kwargs) new_user.save ()

So führen Sie eine Abfrage des Kunden aus, den wir gerade mit Kwargs erstellt haben.

filter_customer = 'email': [email protected], 'username': johndoe, Customer.objects.filter (** filter_customer)

Verwenden von Args und Kwargs in einer Funktion

Bei Verwendung von args und kwargs in derselben Funktionsdefinition, * args muss vorher auftreten ** Kwargs

Klasse MyFunction (Foo): def __init __ (self, * args, ** kwargs): Ausdruck 'my function' super (MyFunction, self) .__ init __ (* args, ** kwargs)

Beispiel:

def Func (* args, ** kwargs): für arg in args: print arg für ein Element in kwargs.items (): print item

Merken args sollte vorher kommen Kwargs.

def Func (* args, ** kwargs): für arg in args: print arg für ein Element in kwargs.items (): print item print Func (1, x = 7, u = 8)
Ausgang 1 ('x', 7) ('u', 8)

Fazit

Ich hoffe, dieses Tutorial hat Ihnen geholfen, Args und Kwargs zu verstehen.

Im Folgenden sind einige Hinweise zu beachten, wenn Sie args und kwargs verwenden:

  • * args und ** Kwargs sind eine spezielle Syntax, die in Funktionen verwendet wird, um eine variable Anzahl von Argumenten an eine Funktion zu übergeben.
  • * args vor auftreten ** Kwargs in einer Funktionsdefinition.
  • * args und ** Kwargs werden am besten in Situationen eingesetzt, in denen die Anzahl der Eingänge relativ gering bleibt.
  • Sie können einen beliebigen Namen verwenden. args und Kwargs sind nur nach Vereinbarung und keine Voraussetzung. Zum Beispiel können Sie verwenden * foo anstatt * args oder ** foo anstatt ** Kwargs.

Die offizielle Python-Dokumentation bietet viele Informationen für weitere Studien. Zögern Sie nicht, zu sehen, was wir auf dem Markt zum Verkauf und zum Lernen zur Verfügung haben, und zögern Sie nicht, Fragen zu stellen und mit dem untenstehenden Feed wertvolles Feedback zu geben.