Bei PyCharm basiert die Typinferenz auf den Kommentaren in docstring.
def foo(x):
"""
:rtype: list of str
"""
return x
def bar(x):
a = foo(x)
a[0]. # <-Zu diesem Zeitpunkt ist die Zeichenfolgenmethode ein Kandidat
docstring
Es scheint zu akzeptieren, wie man Sphinx und Epytext schreibt, aber da Sphinx in Python häufiger vorkommt, sollten wir es lernen.
def repeat(x, y):
"""
:param str x: value to repeat
:type y: int
:param y: number of repeat
:rtype: str
:return: repeated string
"""
return x * y
Das Argument kann wie folgt geschrieben werden: : param type name:
oder : type argument name: type
.
Schreiben Sie den Rückgabewert als : rtype:
.
Sie können grob verstehen, wie man es schreibt, indem Sie sich die Datei "StdlibTypes2.properties" ansehen. Diese Datei befindet sich im Verzeichnis / Applications / PyCharm 2.7.2 EAP.app / helpers
auf dem Mac.
Hier einige Auszüge.
__builtin__.locals = \
:rtype: dict of (string, unknown)
__builtin__.filter = \
:type function_or_none: collections.Callable or None \n\
:type sequence: collections.Iterable of T \n\
:rtype: list of T \n\
__builtin__.enumerate.__init__ = \
:type iterable: collections.Iterable of T \n\
:type start: int or long \n\
:rtype: enumerate of (int, T) \n\
__builtin__.enumerate.next = \
:rtype: (int, T) \n\
__builtin__.dict.__init__ = \
:type seq: collections.Iterable of (T, V) \n\
:rtype: dict of (T, V) \n\
__builtin__.dict.__getitem__ = \
:type y: T \n\
:rtype: V \n\
__builtin__.dict.items = \
:rtype: list of (T, V) \n\
Komplexe Typen können nur für Taples als "(int, str)" geschrieben werden, und sie scheinen ansonsten mit "of" like "dict von (T, V)" dargestellt zu werden.
Es scheint, dass das Typargument ein einzelnes Großbuchstaben sein kann, nicht nur T.
Wenn Sie einen allgemeinen Typ zurückgeben, erscheint es gut, ABC in "Sammlungen" in Form von "T" zu verwenden.
Wenn Sie mehr als eine Person empfangen können, scheint es eine Verbindung mit "oder" für "int oder None" zu geben.
#: :type: int
x = unknown()
Sie können einen Hinweis geben, indem Sie einen Kommentar wie diesen hinzufügen. Aber
#: ????
a, b = unknwon()
Ich weiß immer noch nicht, wie ich in diesem Fall andeuten soll. Sie können es einmal in einem Taple empfangen, aber es ist umständlich, daher scheint es besser zu sein, Folgendes zu definieren: rtype: richtig auf der Funktionsseite.
Recommended Posts