So verwenden Sie *args und **kwargs in Python-Funktionen

Beherrschen Sie *args und **kwargs in Python. Erfahren Sie, wie Sie flexible Funktionen mit dynamischen Positions- und Schlüsselwortargumenten schreiben, Sammlungen entpacken und Wrapper-Funktionen erstellen.

Probieren Sie diese Lösung im Editor aus

Übersicht

In Python müssen Sie häufig Funktionen entwerfen, die eine variable Anzahl von Argumenten akzeptieren können. Zum Beispiel eine Funktion, die die Summe beliebig vieler Ganzzahlen berechnet, oder eine Funktion, die Metadaten mit variierenden Feldern protokolliert. Anstatt Benutzer zu zwingen, eine Liste oder ein Wörterbuch zu übergeben, stellt Python zwei spezielle Symbole bereit: „*args“ und „**kwargs“.

Die Syntax „*args“ ermöglicht es einer Funktion, eine beliebige Anzahl von Positionsargumenten zu akzeptieren. Das einzelne Sternchen „*“ fungiert als Entpackoperator. Wenn es in eine Funktionsdefinition eingefügt wird, sammelt es zusätzliche Positionsargumente in einem Tupel namens „args“. Auf diese Weise können Sie die Eingabewerte problemlos durchlaufen, Berechnungen durchführen oder sie problemlos an eine andere Funktion übergeben.

Die „**kwargs“-Syntax hingegen ermöglicht es einer Funktion, eine beliebige Anzahl von Schlüsselwortargumenten (benannt) zu akzeptieren. Das doppelte Sternchen „**“ sammelt diese Argumente in einem Wörterbuch namens „kwargs“. Dies ist unglaublich nützlich für die Übergabe optionaler Konfigurationen, Stilargumente oder Datenbankattribute. Denken Sie daran, dass die Namen „args“ und „kwargs“ Konventionen sind; Die eigentliche Funktionalität wird durch die einzelnen und doppelten Sternchen bestimmt.

Code- und Ausführungsausgabe

Dieser Code demonstriert die Verwendung von *args zum Summieren von Variablenzahlen, **kwargs zum Drucken von Benutzerprofilen und die Kombination beider in einer einzigen Funktion.

def sum_all(*args):
    print("args type:", type(args).__name__)
    return sum(args)

print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))

def print_profile(**kwargs):
    print("kwargs type:", type(kwargs).__name__)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_profile(name="Bob", role="developer", country="US")

def master_function(first, *args, **kwargs):
    print(f"First argument: {first}")
    print(f"Additional positional args: {args}")
    print(f"Keyword args: {kwargs}")

master_function("hello", 1, 2, 3, debug=True, user_id=42)
Terminal-Ausgabe
args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}

Schrittweise Umsetzung

  • Verwenden Sie ein einzelnes Sternchen vor einem Parameter (z. B. *args), um Positionsargumente in einem Tupel zusammenzufassen.
  • Verwenden Sie ein doppeltes Sternchen vor einem Parameter (z. B. **kwargs), um Schlüsselwortargumente in einem Wörterbuch zusammenzufassen.
  • Behalten Sie die richtige Parameterreihenfolge bei: Standardparameter, *args, Nur-Schlüsselwort-Parameter, dann **kwargs.
  • Verwenden Sie beim Aufrufen von Funktionen die Entpacksyntax, indem Sie *iterable oder **dictionary übergeben.

Häufig gestellte Fragen

Muss ich die Namen „args“ und „kwargs“ verwenden?

Nein, das sind Standard-Community-Konventionen. Lediglich die Präfixe * und ** sind syntaktisch erforderlich. Sie könnten *Werte und **Optionen schreiben, aus Gründen der Lesbarkeit wird jedoch dringend empfohlen, sich an *args und **kwargs zu halten.

Was ist die richtige Reihenfolge beim Definieren einer Funktion?

Die richtige Reihenfolge der Argumente in einer Funktionssignatur ist: Positionsargumente, *args, Nur-Schlüsselwort-Argumente und schließlich **kwargs.

Verwandte Themen

Empfohlene Python-Ressourcen

Erweitern Sie Ihr Wissen mit zugehörigen interaktiven Tutorials, Spickzetteln und Codevergleichen.