Auf der Grundlage, dass ein gutes Beispiel manchmal besser ist als ein langer Diskurs, werde ich zwei Funktionen schreiben, die alle Möglichkeiten von Python zur Übergabe von Variablenargumenten nutzen (sowohl positionale als auch benannte Argumente). Sie sollten leicht in der Lage sein, selbst zu sehen, was sie tun:
def f(a = 0, *args, **kwargs):
print("Received by f(a, *args, **kwargs)")
print("=> f(a=%s, args=%s, kwargs=%s" % (a, args, kwargs))
print("Calling g(10, 11, 12, *args, d = 13, e = 14, **kwargs)")
g(10, 11, 12, *args, d = 13, e = 14, **kwargs)
def g(f, g = 0, *args, **kwargs):
print("Received by g(f, g = 0, *args, **kwargs)")
print("=> g(f=%s, g=%s, args=%s, kwargs=%s)" % (f, g, args, kwargs))
print("Calling f(1, 2, 3, 4, b = 5, c = 6)")
f(1, 2, 3, 4, b = 5, c = 6)
Und hier ist das Ergebnis:
Calling f(1, 2, 3, 4, b = 5, c = 6)
Received by f(a, *args, **kwargs)
=> f(a=1, args=(2, 3, 4), kwargs={'c': 6, 'b': 5}
Calling g(10, 11, 12, *args, d = 13, e = 14, **kwargs)
Received by g(f, g = 0, *args, **kwargs)
=> g(f=10, g=11, args=(12, 2, 3, 4), kwargs={'c': 6, 'b': 5, 'e': 14, 'd': 13})
8 Stimmen
Eine bemerkenswert prägnante Erklärung aquí : "* sammelt alle Positionsargumente in einem Tupel", "** sammelt alle Schlüsselwortargumente in einem Wörterbuch". Das Schlüsselwort ist sammelt .