*args und **kwargs

*args

Python bietet eine Möglichkeit, Funktionen so zu gestalten, dass sie eine beliebige Anzahl von Argumenten akzeptieren, indem spezielle Symbole verwendet werden. Diese Symbole sind * und **, die vor Variablennamen gesetzt werden, um *args bzw. **kwargs zu kennzeichnen. Du kannst den Parametern *args oder **kwargs beliebige Namen geben, aber der Konvention folgend werden sie als args (Argumente) und kwargs (Keyword-Argumente) bezeichnet.
Mit *args kannst du eine beliebige Anzahl von Argumenten ohne Schlüsselwörter an eine Funktion übergeben. Hier ein Beispiel:
def add(*args):
    res = 0             # Initialisiere das Endergebnis mit 0
    for num in args:    # Iteriere über die Liste der übergebenen Argumente
        res += num      # Addiere jede Zahl zur Summe hinzu
    return res

print(add(3, 5, 7, 9))  # 24
In diesem Programm ist args ein Tupel mit den Werten, die wir an die Funktion übergeben. Im obigen Beispiel entspricht args (3, 5, 7, 9). So können wir unserer Funktion beliebig viele Argumente übergeben.

**kwargs

Mit **kwargs kannst du eine beliebige Anzahl von Argumenten mit Schlüsselwörtern an eine Funktion übergeben. Anders ausgedrückt: Wir verwenden **kwargs, um beliebig viele Keyword-Argumente an unsere Funktion zu übergeben. Hier ein Beispiel:
def introduce(**kwargs):
    for key, value in kwargs.items():  # Iteriere über alle Schlüssel-Wert-Paare
        print(f'{key}: {value}')       # Gib jedes Schlüssel-Wert-Paar aus

introduce(Name='Alice', Age=25, Country='USA')  
# 'Name: Alice'
# 'Age: 25'
# 'Country: USA'
In dem obigen Programm ist kwargs ein Wörterbuch mit den Schlüssel-Wert-Paaren, die wir an die Funktion übergeben. Im Beispiel entspricht kwargs {'Name': 'Alice', 'Age': 25, 'Country': 'USA'}.
Du kannst *args und **kwargs auch in einem Funktionsaufruf kombinieren. Dabei muss *args vor **kwargs stehen.
def combined_example(*args, **kwargs):
    print(args)    # Gibt das Tupel der Argumente aus
    print(kwargs)  # Gibt das Wörterbuch der Keyword-Argumente aus

combined_example(1, 2, 3, Name='Alice', Age=25)  
# (1, 2, 3)
# {'Name': 'Alice', 'Age': 25}
In dieser Funktion ist args ein Tupel mit den Werten (1, 2, 3), und kwargs ist ein Wörterbuch mit den Werten {'Name': 'Alice', 'Age': 25}.
Diese Flexibilität, beliebig viele Argumente und Keyword-Argumente zu verarbeiten, kann sehr nützlich sein, wenn du deine Funktionen dynamischer und vielseitiger gestalten möchtest.

Kombination von *args und **kwargs mit regulären Funktionsargumenten

*args und **kwargs können in Kombination mit regulären Funktionsargumenten verwendet werden. In diesen Fällen musst du einige Regeln beachten:
  1. Die korrekte Reihenfolge der Argumente in der Funktionsdefinition sollte sein: Standardargumente, *args, dann **kwargs.
  1. Standardargumente (auch Positionsargumente genannt) müssen immer vor *args und **kwargs angegeben werden.
def function_example(a, b, *args, **kwargs):
    print(a)       # Gibt das erste Standardargument aus
    print(b)       # Gibt das zweite Standardargument aus
    print(args)    # Gibt zusätzliche nicht benannte Argumente aus
    print(kwargs)  # Gibt Keyword-Argumente aus


function_example(1, 2, 3, 4, 5, Name='Alice', Age=25)
# 1
# 2
# (3, 4, 5)
# {'Name': 'Alice', 'Age': 25}
Hier entsprechen 1 und 2 den Standardargumenten a und b in der Funktionsdefinition. Das Tupel (3, 4, 5) repräsentiert zusätzliche Argumente, die in args gesammelt werden. Die verbleibenden Keyword-Argumente werden in kwargs als Wörterbuch gesammelt.
Wenn du *args und **kwargs mit Standardargumenten verwenden möchtest, achte darauf, die Standardargumente beim Funktionsaufruf nicht zu vergessen, da dies zu einem TypeError führen würde. Beispielsweise würde der Aufruf von function_example(1, Name='Alice', Age=25) ohne Angabe eines Wertes für das Argument b einen Fehler verursachen.
 
To check your solution you need to sign in
Sign in to continue