Einführung
Python ist eine der beliebtesten Programmiersprachen weltweit. In Python sind Parameter ein Teil von Funktionsdefinitionen. Sie ermöglichen es Ihnen, bestimmte Argumente für eine Funktion anzugeben. Das Argument kann von der Funktion akzeptiert und angewendet werden.
Es ist jedoch beim Schreiben des Codes nicht möglich zu wissen, welche genauen Anwendungsfälle mit Ihrem Code implementiert werden. Daher ist es im Interesse zukünftiger Programmierer und Benutzer Ihres Programms ratsam, eine variable Anzahl von Argumenten an eine Funktion zu übergeben. Dazu müssen Sie spezielle Parameter verwenden. Diese sind *args und **kwargs. In diesem Tutorial werden wir alles über die *args und **kwargs -Parameter in Python lernen. Wir werden auch lernen, wie man Argumente ordnet und wie man diese in Funktionsaufrufen anwendet.
Voraussetzungen
Um den Schritten im Tutorial folgen zu können, müssen Sie einige Voraussetzungen vorbereiten. Zuerst müssen Sie Python 3 auf Ihrem Server installiert haben, wobei eine Programmierumgebung eingerichtet und betriebsbereit sein muss. Sie müssen auch das Programm für Ihr spezielles Betriebssystem installiert haben (Ubuntu, CentOS, Debian, etc.).
Was ist *args und wie funktioniert es?
Beginnen wir damit zu verstehen, wie *args funktioniert. Die Version des Parameters mit einem einzelnen Sternchen wird verwendet, um variable Argumentlisten ohne Schlüsselwörter an Funktionen zu senden. Denken Sie daran, dass das Sternchen das wichtigste Element in diesem Parameter ist.
Um dies besser zu verstehen, betrachten wir ein Beispiel. Es folgt eine typische Funktion, die Sie in Ihrem Code finden könnten und die zwei Argumente verwendet:
|
1 2 |
def multiply(x, y): print (x * y) |
Wie Sie sehen können, sind unsere Argumente in der obigen Funktion x und y. Beim Aufrufen der Funktion verwenden Sie Zahlen, die x und y entsprechen. Nehmen wir an, wir übergeben die Ganzzahlen 5 und 4 für x und y beziehungsweise:
|
1 2 3 4 |
def multiply(x, y): print (x * y) multiply(5, 4) |
Jetzt können wir den Code ausführen:
|
1 |
python lets_multiply.py |
Die Ausgabe, die wir erhalten, sieht wie folgt aus:
|
1 2 3 |
Output: 20 |
Die Ausgabe zeigt, dass die Ganzzahlen 5 und 4 multipliziert wurden. Das bedeutet, dass die multiply(x, y) Funktion funktioniert hat.
Nehmen wir nun an, wir möchten schließlich drei statt nur zwei Zahlen multiplizieren. Leider führt das Hinzufügen einer zusätzlichen Zahl zur obigen Funktion zu einem Fehler wie diesem:
|
1 2 3 4 |
def multiply(x, y): print (x * y) multiply(5, 4, 3) |
|
1 2 3 |
Output: TypeError: multiply() takes 2 positional arguments but 3 were given |
Wenn Sie also eine Ahnung haben, dass Sie später eventuell weitere Argumente hinzufügen müssen, verwenden Sie am besten den Parameter *args für Ihren Komfort. Sie können ihn so verwenden:
|
1 2 3 4 5 6 7 8 9 10 |
def multiply(*args): z = 1 for num in args: z *= num print(z) multiply(4, 5) multiply(10, 9) multiply(2, 3, 4) multiply(3, 5, 10, 6) |
Wir haben einfach die x und y-Funktionsparameter durch *args ersetzt. Das Ausführen dieses Codes liefert Ihnen das Produkt für jeden einzelnen Funktionsaufruf wie folgt:
|
1 2 3 4 5 6 |
Output: 20 90 24 900 |
Somit ist *args ideal, wenn Sie variable Argumentlisten an Ihre Funktion senden möchten. Aufgrund dieser Fähigkeit können Sie so viele Argumente an Funktionsaufrufe übergeben, wie Sie möchten. Dadurch ermöglicht dieser Parameter den Aufbau eines flexibleren Codes, der eine beträchtliche Anzahl variabler Argumente ohne Schlüsselwörter in der Funktion akzeptieren kann.
Was ist **kwargs und wie funktioniert es?
Als Nächstes haben wir die Version des Parameters mit doppeltem Sternchen, nämlich **kwargs. Im Gegensatz zur vorherigen Form ermöglicht dieser Parameter die Übergabe von variablen Argument-Dictionaries mit Schlüsselwörtern in die Funktion. Ähnlich wie *args, die doppelten Sternchen sind das wichtigste Element des Parameters.
Wie im vorherigen Abschnitt können Sie so viele Argumente hinzufügen, wie Sie möchten. Der Unterschied besteht darin, dass Sie Schlüsselwörter zuweisen müssen. Um dies besser zu verstehen, betrachten Sie das folgende Beispiel. Hier beginnen wir mit der Ausgabe der **kwargs-Argumente, die wir an die Funktion übergeben wollen:
|
1 2 |
def print_kwargs(**kwargs): print(kwargs) |
Rufen wir nun die Funktion auf. Wie Sie sehen können, haben wir Schlüsselwort-Argumente hinzugefügt:
|
1 2 3 4 |
def print_kwargs(**kwargs): print(kwargs) print_kwargs(kwargs_1="Shark", kwargs_2=4.5, kwargs_3=True) |
Wenn Sie das Programm an dieser Stelle ausführen, wird diese Ausgabe angezeigt:
|
1 |
python print_kwargs.py |
|
1 2 3 |
Ausgabe: {'kwargs_3': True, 'kwargs_2': 4.5, 'kwargs_1': 'Shark'} |
Es besteht jedoch die Möglichkeit, dass Ihr Dictionary-Datentyp ungeordnet ist. Dies hängt weitgehend von der von Ihnen verwendeten Python 3-Version ab. Beispielsweise liefert jede Version nach Python 3.6 die Schlüssel-Wert-Paare in der richtigen Reihenfolge. Jede Version davor zeigt die Ausgabe in zufälliger Reihenfolge an. Das von Ihnen erstellte Dictionary wird als kwargs bezeichnet. Beachten Sie, dass Sie es wie jedes andere Dictionary auf dem System verwenden und manipulieren können. Sehen wir uns an, wie Sie den Parameter **kwargs noch besser nutzen und anwenden können.
Im folgenden Beispiel versuchen wir, eine neue Funktion zu erstellen, die ein Dictionary mit Namen begrüßt. Unser Beispiel-Dictionary wird zwei Namen enthalten:
|
1 2 3 4 5 |
def print_values(**kwargs): for key, value in kwargs.items(): print("Der Wert von {} ist {}".format(key, value)) print_values(my_name="Sammy", your_name="Casey") |
Das Ausführen des Programms liefert diese Ausgabe:
|
1 |
python print_values.py |
|
1 2 3 4 |
Ausgabe: Der Wert von your_name ist Casey Der Wert von my_name ist Sammy |
Ähnlich wie im vorherigen Beispiel können die Dictionaries ungeordnet erscheinen. Daher kann die Reihenfolge der Namen Casey und Sammy in einigen Fällen vertauscht sein.
Als Nächstes werden wir der Funktion zusätzliche Argumente übergeben. Dies beweist, dass Sie **kwargs so viele Argumente akzeptieren lassen können, wie Sie möchten:
|
1 2 3 4 5 6 7 8 9 10 11 |
def print_values(**kwargs): for key, value in kwargs.items(): print("Der Wert von {} ist {}".format(key, value)) print_values( name_1="Alex", name_2="Gray", name_3="Harper", name_4="Phoenix", name_5="Remy", name_6="Val") |
Wenn Sie das Programm ausführen, wird diese Ausgabe angezeigt:
|
1 2 3 4 5 6 7 8 |
Ausgabe: Der Wert von name_2 ist Gray Der Wert von name_6 ist Val Der Wert von name_4 ist Phoenix Der Wert von name_5 ist Remy Der Wert von name_3 ist Harper Der Wert von name_1 ist Alex |
Diese Ausgabe kann ebenfalls ungeordnet sein. Unabhängig davon zeigen diese Beispiele, dass **kwargs Ihrem Programm die Flexibilität gibt, eine Reihe von Schlüsselwort-Argumenten zu verwenden.
Wie man Argumente ordnet
Es ist wichtig, die festgelegte Reihenfolge zu beachten, wenn Sie ein Argument in einer Funktion oder einem Funktionsaufruf ordnen. Sie lautet wie folgt:
-
Formale Positionsargumente
-
*args
-
Schlüsselwort-Argumente
-
**kwargs
Angenommen, Sie verwenden *args und **kwargs mit expliziten Positions-Parametern. Das bedeutet, dass Ihre Funktion so aussehen wird:
|
1 2 |
def example(arg_1, arg_2, *args, **kwargs): ... |
Andererseits verleiht die Verwendung dieser Parameter mit Namen (Schlüsselwortparameter) Ihrer Funktion die folgende allgemeine Struktur:
|
1 2 |
def example2(arg_1, arg_2, *args, kw_1="shark", kw_2="blobfish", **kwargs): ... |
Wenn Sie die festgelegte Reihenfolge nicht einhalten, erhalten Sie beim Ausführen Ihres Codes einen Syntaxfehler. Daher ist es am besten, diesen Fehler von vornherein zu vermeiden.
Wie man *args und **kwargs in Funktionsaufrufen verwendet
Zuletzt zeigen wir Ihnen, wie Sie beide Parameter verwenden, um Argumente an Funktionen zu übergeben. Wir beginnen mit einem Beispiel, das *args:
|
1 2 3 4 5 6 7 8 |
def some_args(arg_1, arg_2, arg_3): print("arg_1:", arg_1) print("arg_2:", arg_2) print("arg_3:", arg_3) args = ("Sammy", "Casey", "Alex") some_args(*args) |
Es gibt drei Parameter in dieser Funktion: arg_1, arg_2, und arg_3. Sie müssen eine Variable erstellen und sie auf ein Iterable setzen. In diesem Fall ist es ein Tupel. Dann können Sie die Variable mithilfe der Sternchen-Syntax an die Funktion übergeben.
Beobachten Sie die Ausgabe, wenn Sie das Programm mit dem python some_args.py -Befehl ausführen:
|
1 2 3 4 5 |
Ausgabe: arg_1: Sammy arg_2: Casey arg_3: Alex |
Es ist auch möglich, das Programm auf einen iterierbaren Listen-Datentyp mit einem anderen Variablennamen zu ändern. Der folgende Code kombiniert *args mit einem benannten Parameter:
|
1 2 3 4 5 6 7 8 |
def some_args(arg_1, arg_2, arg_3): print("arg_1:", arg_1) print("arg_2:", arg_2) print("arg_3:", arg_3) my_list = [2, 3] some_args(1, *my_list) |
Die Ausgabe beim Ausführen des Programms sieht wie folgt aus:
|
1 2 3 4 5 |
Ausgabe: arg_1: 1 arg_2: 2 arg_3: 3 |
Andererseits können Sie Schlüsselwortargumente mit **kwargs anwenden. Stellen Sie sicher, dass Sie eine Variable erstellen, die einem Dictionary entspricht. Sie sollte 2 Schlüssel-Wert-Paare haben. Hier ist, wie wir die Variable an eine Funktion mit 3 Argumenten übergeben:
|
1 2 3 4 5 6 7 8 |
def some_kwargs(kwarg_1, kwarg_2, kwarg_3): print("kwarg_1:", kwarg_1) print("kwarg_2:", kwarg_2) print("kwarg_3:", kwarg_3) kwargs = {"kwarg_1": "Val", "kwarg_2": "Harper", "kwarg_3": "Remy"} some_kwargs(**kwargs) |
Verwenden Sie erneut den python some_kwargs.py -Befehl, um das Programm auszuführen:
|
1 2 3 4 5 |
Ausgabe: kwarg_1: Val kwarg_2: Harper kwarg_3: Remy |
Fazit
Am Ende dieses Tutorials sollten Sie bestens damit vertraut sein, was *args und **kwargs sind und wie sie funktionieren. Sie können diese Parameter nun in Ihrem eigenen Code anwenden, um Ihr Programm für zukünftige Benutzer flexibel zu gestalten. Diese eignen sich ideal für Situationen, in denen Sie nicht wissen, wie viele Argumente verwendet werden könnten. Achten Sie nur darauf, bei den kritischen Elementen der Funktionen und Parameter vorsichtig zu sein.
Schließlich finden Sie hier weitere Ressourcen aus unserem Blog , die Ihnen helfen werden, erfolgreich mit Python zu arbeiten:
- Das txt-Dateiformat: Arbeiten mit Klartextdateien in Python 3
- Schleifen in Python 3: Verwendung von Break-, Continue- und Pass-Anweisungen
- Module importieren in Python 3: Ein umfassender Leitfaden
- Verwendung von Python 3 String-Formatierern
- Programmieren mit Python 3: Wie geht man beim Konstruieren von Klassen und Definieren von Objekten vor?
Viel Spaß beim Programmieren!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.