Heim  >  Artikel  >  Backend-Entwicklung  >  Eine ausführliche Einführung in die Typprüfung in Python

Eine ausführliche Einführung in die Typprüfung in Python

高洛峰
高洛峰Original
2017-02-20 10:21:241593Durchsuche

Vorwort

Jeder weiß, dass Python eine stark typisierte, dynamische Typprüfungssprache ist. Der sogenannte dynamische Typ bedeutet, dass wir beim Definieren einer Variablen den Typ der Variablen nicht angeben müssen. Der Python-Interpreter prüft ihn automatisch zur Laufzeit.

Im Vergleich zu statisch typisierten Sprachen (wie C) geht es hier nicht nur darum, ein paar weniger Typdeklarationszeichen zu schreiben:

#include <stdlib.h>
#include <stdio.h>

#define BUFF 100

char* greeting(char* name){ 
 char* msg = (char *) malloc(sizeof(char) * BUFF);
 sprintf(msg, "Hello, %s!", name);
 return msg;
}

int main(){ 
 printf("Greeting: <%s>\n", greeting("C99"));
 return 0;
}

def greeting(name): 
 return "Hello, {}!".format(name)
def main(): 
 print("Greeting: <%s>" % greeting("Python35"))
if __name__ == &#39;__main__&#39;: 
 main()

Dynamisches Tippen befreit unser Denken bis zu einem gewissen Grad von der Simulation der Computerarbeit, sodass wir uns mehr auf die Probleme konzentrieren können, die gelöst werden müssen: Genau wie Im obigen Beispiel müssen wir nicht über die von der Begrüßungsfunktion akzeptierten Parametertypen und den Typ des Rückgabewerts nachdenken, sondern müssen nur die Funktionen berücksichtigen, die die Begrüßungsfunktion implementieren muss.

Das bedeutet natürlich nicht, dass dynamische Typen unbedingt besser sind als statische Typen. Es ist unfair, das obige Beispiel mit der Sprache C und Python zu vergleichen:

package main

import "fmt"

func greeting(name string) string { 
 return fmt.Sprintf("Hello, %s", name)
}
func main() { 
 fmt.Printf("Greeting: <%s>", greeting("Go"))
}

Der Vorteil (und teilweise auch Nachteil) der statischen Typisierung besteht darin, dass beim Definieren einer Methode ein obligatorisches Protokoll (Schnittstelle) formuliert wird und dies nur durch Befolgen des Protokolls möglich ist richtig eingesetzt werden. Dies ist sehr hilfreich für die Zusammenarbeit mehrerer Personen, die Entwicklung von Bibliotheken von Drittanbietern, das schnelle Auffinden von Fehlern usw. Ein weiterer großer Vorteil der statischen Typisierung besteht darin, dass die IDE dabei helfen kann, die Schnittstellennutzung und Typprüfung zu beschleunigen und so die Effizienz weiter zu verbessern. Da es so viele Vorteile gibt, sollte man auch Python lernen? Tatsächlich hat PEP 484 in Python 3.5 bzw. PEP 526 in Python 3.6 die Syntax von Typhinweisen hinzugefügt. Bei PEP 484 geht es hauptsächlich um die Typdeklarationssyntax von Parametern und Rückgabewerten von Funktionen, Methoden, Klassen usw PEP 526 fügt die Deklaration des Variablentyps hinzu:

def greeting(name: str) -> str: 
 return "Hello, {}!".format(name)

Mypy

Mypy ist offiziell empfohlen statische Typprüfungstools:

python3 -m pip install mypy

Sie können den Befehl mypy verwenden, um Python-Programme direkt zu überprüfen:

mypy greeting.py

Zur Vereinfachung können Sie es auf die IDE anwenden. Am Beispiel von Atom können Sie das Plug-in linter-mypy installieren:

python3 -m pip install typed-ast 
apm install linter 
apm install linter-mypy

Eine ausführliche Einführung in die Typprüfung in Python

Die von Mypy unterstützten gängigen Typen sind in der folgenden Tabelle aufgeführt (aus der offiziellen Dokumentation):

Eine ausführliche Einführung in die Typprüfung in Python

wobei List/Dict/Iterable/Sequence/Any aus der Standardbibliothekstypisierung stammt. Sequence und Iterable entsprechen hier jeweils collections.abc.Sequence und collections.abc.Iterable. Zur einfachen Unterscheidung kann Sequence durch einen numerischen Index indiziert werden, während Iterable den Generator darstellen kann:

Eine ausführliche Einführung in die Typprüfung in Python

Python 2.x

Code mit hinzugefügten Typanmerkungen kann direkt über den Python 3.5-Interpreter ausgeführt werden, ist jedoch völlig inkompatibel mit Python 2.x. Wenn Sie es in Python 2.x verwenden möchten, müssen Sie zunächst die Eingabe installieren:

pip install typing

Dann können Sie es zwangsweise in das Formular einfügen eines einzeiligen Kommentars:

def send_email(address, # type: Union[str, List[str]] 
  sender, # type: str
  cc,  # type: Optional[List[str]]
  bcc,  # type: Optional[List[str]]
  subject=&#39;&#39;,
  body=None # type: List[str]
  ):
 # type: (...) -> bool
 """Send an email message. Return True if successful."""
 pass

Eine ausführlichere Einführung in die Typprüfung in Python und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn