Blanke Sternchen in der Funktion Argumente?
Was hat eine blanke Sternchen in den Argumenten einer Funktion?
Als ich sah auf die pickle-Modul, ich sehe dies:
pickle.dump(obj, file, protocol=None, *, fix_imports=True)
Ich weiß, über einen single-und double-Sternchen vorangehenden Argumente (für eine variable Anzahl von Argumenten), aber dies vor dem nichts. Und ich bin mir ziemlich sicher, das hat nichts zu tun mit der Gurke. Das ist wahrscheinlich nur ein Beispiel für dies geschieht. Ich habe nur gelernt, seinen Namen, wenn ich schickte diese an den interpreter:
>>> def func(*):
... pass
...
File "<stdin>", line 1
SyntaxError: named arguments must follow bare *
Wenn es darauf ankommt, bin ich auf python 3.3.0.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nackten
*
wird verwendet, um die Kraft, die Anrufer zu verwenden benannte Argumente - so Sie können eine Funktion definieren, die mit*
als argument, wenn Sie keine folgenden Schlüsselwort-Argumente.Sehen diese Antwort oder Python-3-Dokumentation für mehr details.
*args
eintreten müssen, bevor die nackten*
.Während die original-Antwort beantwortet die Frage vollständig, nur das hinzufügen ein bisschen von Informationen. Das Verhalten für die einzelnen Sternchen stammt aus
PEP-3102
. Zitat aus dem zugehörigen Abschnitt:In einfachen Englisch, das bedeutet, dass Sie übergeben Sie den Wert für key, Sie müssen explizit übergeben Sie es als
key="value"
.*
zu verschlingen restlichen positions-Argumente, aber das ist nicht der Fall. Vorbei zusätzliche positions-Argumente, als die Funktion erwartet, gibt eine Fehlermeldung dieser Art:foo() takes exactly 1 positional argument (2 given)
dem obigen Beispiel mit **kwargs
Habe ich Folgendes gefunden link sehr hilfreich sein, zu erklären
*
,*args
und**kwargs
:https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/
Im wesentlichen, zusätzlich zu den oben genannten Antworten habe ich gelernt, von der Seite oben (credit: https://pythontips.com/author/yasoob008/) die folgenden:
Mit der Demo-Funktion definiert zuerst unten, da sind zwei Beispiele, eines mit
*args
und mit**kwargs
So
*args
können Sie dynamisch erstellen Sie eine Liste mit Argumenten, die genommen wird, in der Reihenfolge, in der Sie zugeführt werden, in der Erwägung, dass**kwargs
können die übergabe von BENANNTEN Argumenten, und kann verarbeitet werden, indem Sie dem NAMEN entsprechend (unabhängig von der Reihenfolge, in der Sie gefüttert werden).Die Website weiter, feststellend, dass die richtige Reihenfolge der Argumente sollte: