Python Tutorial
- jetzt Python programmieren lernen

Funktionen mit variabler Parameteranzahl

Bisher sind wir bei der Übergabe der Parameter immer davon ausgegangen, dass wir die Anzahl der Parameter kennen.

def ausgabe(wert1, wert2):
    print("Ausgabe von Text aus einer Funktion")
    print(wert1)
    print(wert2)

ausgabe(5,3)

Was passiert aber, wenn wir die Anzahl der Parameter nicht kennen? Wenn also eine variable Parameteranzahl vorliegt? Auch für diesen Fall hat und Python eine Lösung. Wir kennzeichnen unseren Parameternamen mit einem Stern am Anfang.

def ausgabe( *mehrereParameter ):
    for einzelwert in mehrereParameter:
        print(einzelwert)

ausgabe("Hallo", "Welt", "guten", "Morgen")

Jetzt können wir beliebig viele Parameter übergeben. Die Ausgabe des Beispielcodes ergibt:

Hallo
Welt
guten
Morgen

Jeder einzelne Parameter wird über die print-Ausgabe in einer eigenen Zeile ausgegeben.

Allerdings funktioniert eine Vorbelegung eines einzelnen Parameters nicht mehr, wie wir es bereits kennengelernt haben:

def ausgabe(wert1="Hallo", wert2="Welt"):
    print("Ausgabe von Text aus einer Funktion")
    print(wert1)
    print(wert2)

ausgabe(5,3)

Wir haben bei Funktionen mit variabler Parameteranzahl auch keinen einzelnen Parameter – die folgende Konstruktion führt zu der Fehlermeldung "SyntaxError: invalid syntax".

def ausgabe( *mehrereParameter="falsch!" ):

Und das gute ist – wir benötigen es in diesem Fall auch nicht wirklich. Wir können beliebig viele Parameter übergeben. Und dabei meint mit "beliebig viele" auch keinen Inhalt. Folgender Code wird ohne Fehlermeldung korrekt abgearbeitet – es erfolgt auch keine Ausgabe, denn wir haben auch keinen Inhalt unserem Parameter "*mehrereParameter" übergeben:

def ausgabe( *mehrereParameter ):
    for einzelwert in mehrereParameter:
        print(einzelwert)

ausgabe()

Vorsicht bei der Verwendung! Hier wird eine spätere Fehlersuche aufwendiger – besonders bei Logikfehlern.

*args and **kwargs – Konventionen unter Programmierer

Bei der eingeführten variablen Parameteranzahl haben wir oben im Beispiel die Bezeichnung *mehrereParameter verwendet. Das funktioniert auch wunderbar. Wer diesen Bereich von Python kennt, wundert sich vielleicht über die gewählte Bezeichnung. Viele Tutorials verwenden hier die Bezeichnung *args und **kwargs. Wichtig sind nur die Sternchenoperatoren am Anfang – die Bezeichnung danach kann beliebig gesetzt werden! Die nach Konvention benutzte Bezeichnung *args steht einfach für das englische „arguments“. Somit haben wir die Wortherkunft. Für den Einsteiger ist es meiner Erfahrung nach klarer, wenn man erst einmal *mehrereParameter verwendet.

Unterschied zwischen *args and **kwargs

Bei der Verwendung von **kwargs spielen Dictionary die Hauptrolle. Wir verwenden für die Parameterübergabe also Key-Value Paare.

def uebergeben(**kwargs):
    for key, value in kwargs.items():
        print("{0} = {1}".format(key, value))

uebergeben(vorname="Axel")

Als Ergebnis erhalten wir:

vorname = Axel

Und was ist die Herkunft der Bezeichnung **kwargs? Diese kommt aus Englischen keywordarguments.

In der deutschen Schreibweise müsste dann unser **kwargs dann etwas mit *mehrereWoerterbuchParameter sich nennen. Kann man machen, muss man aber nicht. Wie gesagt: Es sind primär die zwei Sternchenoperatoren am Anfang wichtig – alles danach kann nach Belieben benannt werden.

Reihenfolge, wenn alle 3 Arten von Übergaben verwendet werden

Wenn wir in unserem Programm nun alle 3 Arten von Übergaben verwenden wollen, dann muss die Reihenfolge eingehalten werden:

eineFunktion(Argument1, *args, **kwargs)

Weiterempfehlen • Social Bookmarks • Vielen Dank

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Das neue E-Book zum Kurs gibt es zum Kaufen.

Sie können uns auch eine Spende über PayPal zukommen lassen.

Bestellen Sie Bücher über folgenden Link bei Amazon:
Bücher über Python

Vielen Dank für Ihre Unterstützung