Wenn ich eine Funktion wie diese habe:
def foo(name, opts={}):
pass
Und ich möchte den Parametern Typhinweise hinzufügen. Wie mache ich das? Die Art und Weise, wie ich angenommen habe, gibt mir einen Syntaxfehler:
def foo(name: str, opts={}: dict) -> str:
pass
Das Folgende löst keinen Syntaxfehler aus, aber es scheint nicht die intuitive Art zu sein, diesen Fall zu behandeln:
def foo(name: str, opts: dict={}) -> str:
pass
Ich kann in der typing
Dokumentation oder in einer Google-Suche nichts finden .
Bearbeiten: Ich wusste nicht, wie Standardargumente in Python funktionieren, aber für diese Frage werde ich die obigen Beispiele beibehalten. Im Allgemeinen ist es viel besser, Folgendes zu tun:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
scala
macht es auch die Sprache.Antworten:
Dein zweiter Weg ist richtig.
dies gibt aus
Es ist wahr, dass es nicht in PEP 484 aufgeführt ist , aber Typhinweise sind eine Anwendung von Funktionsanmerkungen, die in PEP 3107 dokumentiert sind. Der Syntaxabschnitt macht deutlich, dass Schlüsselwortargumente auf diese Weise mit Funktionsanmerkungen funktionieren.
Ich rate dringend davon ab, veränderbare Keyword-Argumente zu verwenden. Weitere Informationen hier .
quelle
Wenn Sie die Eingabe verwenden (eingeführt in Python 3.5), können Sie verwenden
typing.Optional
, wo diesOptional[X]
entsprichtUnion[X, None]
. Es wird verwendet, um zu signalisieren, dass der explizite Wert vonNone
zulässig ist. Vom Tippen. Optional :quelle
=
In geben,Optional[int] = None
wie es eine Konvention für nicht typangedeutete Schlüsselwortargumente ist?Ich habe kürzlich diesen Einzeiler gesehen:
quelle
None
die Standardeinstellung festlegen und dann die Methode überprüfen, wird dieses Problem vermieden, indem bei jedem Aufruf der Methode ein neues Diktat zugewiesen wird.