Verwenden von variablen Argumenten in Python

Abgeschlossen

In Python können Sie eine beliebige Anzahl von Argumenten und Schlüsselwortargumenten verwenden, ohne sie einzeln zu deklarieren. Diese Fähigkeit ist nützlich, wenn eine Funktion möglicherweise eine unbekannte Anzahl von Eingaben erhält.

Variable Argumente

Argumente in Funktionen sind erforderlich. Wenn Sie jedoch variable Argumente verwenden, lässt die Funktion zu, dass eine beliebige Anzahl von Argumenten (einschließlich 0) übergeben wird. Die Syntax für die Verwendung von variablen Argumenten stellt dem Namen des Arguments ein einzelnes Sternchen (*) voran.

Die folgende Funktion gibt die empfangenen Argumente aus:

def variable_length(*args):
    print(args)

Hinweis

Es ist nicht erforderlich, variable Argumente als args zu bezeichnen. Sie können einen beliebigen gültigen Variablennamen verwenden. Obwohl es üblich ist, *args oder *a zu verwenden, sollten Sie versuchen, die gleiche Konvention im ganzen Projekt anzuwenden.

In diesem Fall weist *args die Funktion an, eine beliebige Anzahl von Argumenten (einschließlich 0) zu akzeptieren. Innerhalb der Funktion ist args jetzt als Variable verfügbar, die alle Argumente als Tupel enthält. Testen Sie die Funktion, indem Sie eine beliebige Anzahl oder einen beliebigen Typ von Argumenten übergeben:

variable_length()
()
variable_length("one", "two")
('one', 'two')
variable_length(None)
(None,)

Wie Sie sehen können, gibt es keine Einschränkung hinsichtlich Anzahl oder Typ der übergebenen Argumente.

Ein Raumschiff durchläuft vor einem Start mehrere Schritte. Je nach Aufgaben oder Verzögerungen können diese Schritte länger als geplant dauern. Erstellen wir eine Funktion variabler Länge, mit der berechnet werden kann, wie viele Minuten es bis zum Start noch dauert. Dabei wird angegeben, wie viel Zeit die einzelnen Schritte in Anspruch nehmen:

def sequence_time(*args):
    total_minutes = sum(args)
    if total_minutes < 60:
        return f"Total time to launch is {total_minutes} minutes"
    else:
        return f"Total time to launch is {total_minutes/60} hours"

Testen Sie die Funktion, indem Sie eine beliebige Anzahl von Minuten übergeben:

sequence_time(4, 14, 18)
Total time to launch is 36 minutes.
sequence_time(4, 14, 48)
Total time to launch is 1.1 hours.

Hinweis

Wenn Sie variable Argumente verwenden, wird den einzelnen Werten kein Variablenname mehr zugewiesen. Alle Werte sind jetzt Teil des Catch-All-Variablennamens, der das Sternchen (args in diesen Beispielen) verwendet.

Variable Schlüsselwortargumente

Damit eine Funktion eine beliebige Anzahl von Schlüsselwortargumenten akzeptiert, verwenden Sie eine ähnliche Syntax. In diesem Fall ist ein doppeltes Sternchen erforderlich:

def variable_length(**kwargs):
    print(kwargs)

Probieren Sie die Beispielfunktion aus, die die als kwargs übergebenen Namen und Werte ausgibt:

variable_length(tanks=1, day="Wednesday", pilots=3)
{'tanks': 1, 'day': 'Wednesday', 'pilots': 3}

Wenn Sie bereits mit Python-Wörterbüchern vertraut sind, werden Sie feststellen, dass Schlüsselwortargumente variabler Länge als Wörterbuch zugewiesen werden. Um mit den Variablen und Werten zu interagieren, verwenden Sie die gleichen Vorgänge wie ein Wörterbuch.

Hinweis

Wie bei variablen Argumenten müssen Sie nicht kwargs verwenden, wenn Sie variable Schlüsselwortargumente verwenden. Sie können einen beliebigen gültigen Variablennamen verwenden. Obwohl es üblich ist, **kwargs oder **kw zu verwenden, sollten Sie versuchen, die gleiche Konvention im ganzen Projekt anzuwenden.

In dieser Funktion verwenden wir variable Schlüsselwortargumente, um die Astronauten auszugeben, die der Mission zugeteilt sind. Da diese Funktion eine beliebige Anzahl von Schlüsselwortargumenten zulässt, kann sie unabhängig von der Anzahl der zugeteilten Astronauten wiederverwendet werden:

def crew_members(**kwargs):
    print(f"{len(kwargs)} astronauts assigned for this mission:")
    for title, name in kwargs.items():
        print(f"{title}: {name}")

Probieren Sie es mit der Crew von Apollo 11 aus:

crew_members(captain="Neil Armstrong", pilot="Buzz Aldrin", command_pilot="Michael Collins")
3 astronauts assigned for this mission:
captain: Neil Armstrong
pilot: Buzz Aldrin
command_pilot: Michael Collins

Da Sie jede beliebige Kombination von Schlüsselwortargumenten übergeben können, achten Sie darauf, wiederholte Schlüsselwörter zu vermeiden. Wiederholte Schlüsselwörter führen zu einem Fehler:

crew_members(captain="Neil Armstrong", pilot="Buzz Aldrin", pilot="Michael Collins")
  File "<stdin>", line 1
SyntaxError: keyword argument repeated: pilot