2017-12-06 7 views
0

Ich fange an, Typhinweise in Python zu lernen, um die zukünftige Portierung von Code von Python auf C zu erleichtern. Ich frage mich, was der Unterschied zwischen der Verwendung von Typen direkt in Typhinweisen oder der Verwendung der Klassen ist typing Modul.Welchen Nutzen hat die Verwendung von Bibliotheksklassen im Vergleich zu Typen in Python-Hinweisen?

Zum Beispiel kann die Differenz zwischen

def somefn(a: list[int]) -> tuple[str, int]: 
    ... 

und

from typing import List, Tuple 

def somefn(a: List[int]) -> Tuple[str, int]: 
    ... 

Es scheint, wie einige Klassen wie Union, Any, Callable und Iterable wäre nützlich, aber die Nützlichkeit von Klassen für die Daten Typen, die in Python bereits als Schlüsselwörter existieren, sind mir unklar.

Antwort

1

Es ist nützlich für das Schreiben von Anmerkungen, die rechtlich ausgewertet werden können; list[int] wird explodieren, wenn Sie versuchen, es tatsächlich auszuführen, während typing.List[int] einen neuen generischen Typ zurückgibt, der den Typ des Containers und des Inhalts kennt. Dies ist besonders wichtig im Falle von type aliases, wo eine spezielle Version eines generischen auf der obersten Ebene definiert ist, als Annotation weiter wieder verwendet:

Vector = List[float] 
def scale(scalar: float, vector: Vector) -> Vector: 
    ... 

legal ist, während:

Vector = list[float] 
def scale(scalar: float, vector: Vector) -> Vector: 
    ... 

explodiert in deinem Gesicht. Sie werden feststellen, dass Nicht-Container-/Generatypen in der Regel keinen typing-Typ haben (Ausnahmen wie Text betreffen Probleme bei der Portierung), da Typaliase sie nur als "Blatt" -Typ verwenden und nicht als Stamm- oder Verzweigungstypen.

Verwandte Themen