Der einzelne Stern *
entpackt die Sequenz / Sammlung in Positionsargumente, sodass Sie Folgendes tun können:
def sum(a, b):
return a + b
values = (1, 2)
s = sum(*values)
Dadurch wird das Tupel entpackt, sodass es tatsächlich wie folgt ausgeführt wird:
s = sum(1, 2)
Der Doppelstern **
macht dasselbe, nur unter Verwendung eines Wörterbuchs und damit benannter Argumente:
values = { 'a': 1, 'b': 2 }
s = sum(**values)
Sie können auch kombinieren:
def sum(a, b, c, d):
return a + b + c + d
values1 = (1, 2)
values2 = { 'c': 10, 'd': 15 }
s = sum(*values1, **values2)
wird ausgeführt als:
s = sum(1, 2, c=10, d=15)
Siehe auch Abschnitt 4.7.4 - Entpacken von Argumentlisten der Python-Dokumentation.
Darüber hinaus können Sie zu verwendende Funktionen *x
und **y
Argumente definieren. Auf diese Weise kann eine Funktion eine beliebige Anzahl von Positions- und / oder benannten Argumenten akzeptieren, die in der Deklaration nicht speziell benannt sind.
Beispiel:
def sum(*values):
s = 0
for v in values:
s = s + v
return s
s = sum(1, 2, 3, 4, 5)
oder mit **
:
def get_a(**values):
return values['a']
s = get_a(a=1, b=2)
Auf diese Weise können Sie eine große Anzahl optionaler Parameter angeben, ohne sie deklarieren zu müssen.
Und wieder können Sie kombinieren:
def sum(*values, **options):
s = 0
for i in values:
s = s + i
if "neg" in options:
if options["neg"]:
s = -s
return s
s = sum(1, 2, 3, 4, 5)
s = sum(1, 2, 3, 4, 5, neg=True)
s = sum(1, 2, 3, 4, 5, neg=False)
*
und**
Betreiber , die nichts mit dieser Syntax zu tun haben.