Ich habe kürzlich O'Reillys Programming TypeScript gelesen und war sehr beeindruckt. Die Tiefe und der Spaß von Generika, die Zunahme von Funktions- und Objektinformationen aufgrund des Vorhandenseins von Typen und das Gefühl der Sicherheit, das geschaffen wird. Ich bin ängstlich geworden und kann ohne Schimmel kein Nickerchen machen.
Zu dieser Zeit habe ich beschlossen, es auch diesen Monat bei "Hida Takayama Python Mokumokukai" anzukündigen, und ich dachte, dass es fast kein Material mehr gibt. Es macht Spaß, mit TypeScript zu verkünden, was mich beeindruckt hat.
Glücklicherweise hat Python auch Typhinweise. Ich dachte, Pythons Typsystem sei etwas schlechter als TypeScript, aber als ich es nachgeschlagen habe, warum? Es hatte alle nützlichen Funktionen (vor allem nach 3.8)
In diesem Artikel möchte ich die Tiefe, den Spaß und die Bequemlichkeit des Formsystems durch die Serie vermitteln.
Als ich auf halbem Weg schrieb, als ich das PyCon JP2020-Programm sah, " Python 3.9 Wie man typsicheres Python in der Ära von Mitsuki Ogasawara beherrscht “, nicht wahr? Ich dachte, es wäre geschafft, aber ich schrieb es und beschloss, so zu bleiben, wie es ist. Nicht jeder schreibt das Gleiche. Teilweise auf die Notation nach 3.9 verwiesen und in diesem Inhalt wiedergegeben.
Einige dieser Leute mögen dies als Muster betrachten. Das Vorhandensein der Form erhöht die Muskelkraft (Leistung), ist jedoch gezwungen, steif und in der Bewegung eingeschränkt zu sein. Das ist aber nicht der Fall. Die Formen sind programmierbar und produktiv. Wenn Sie es bis zum Ende lesen, werden Sie es sicherlich verstehen. Nein, ich kann verstehen. Ich denke ich kann es schaffen. Ich werde mein Bestes geben, um es zu schreiben, damit Sie es verstehen können.
Ich denke, diese Leute haben auch neue Entdeckungen. Es war überraschend interessant, die dynamische Sprache später einzugeben. Das sind TypeScript und Typhinweise. Sogar diejenigen, die eine raue Spracherfahrung haben, können überrascht sein und den interessanten Mechanismus des Unionstyps und des Literaltyps entdecken.
In diesem Abschnitt werden die Merkmale von Python-Typhinweisen und die Verwendungszwecke beschrieben, die sich aus diesen Merkmalen ergeben.
Typinformationen werden zur Laufzeit ignoriert. Damit
Auf den ersten Blick ist es sozusagen eine subtile Sache, ** Typhinweise sind nur Kommentare **. Ich kann sehen, dass Ihre Motivation nachlässt. Wenn Sie jedoch die Typhinweise als ** Kommentare ** betrachten, wird deren Intensität deutlich.
Wie ist es, ist es nicht interessant, so zu denken? Und es wird sehr mächtig aussehen. ** In der Tat ist es mächtig **.
Ich denke übrigens, dass sich die Motivation aller ein wenig erholt hat. Lassen Sie uns jetzt in die Praxis gehen.
Diesmal habe ich mit VS Code und Pyright experimentiert. Informationen zum Festlegen des Urheberrechts in VSCode finden Sie unten. https://qiita.com/simonritchie/items/33ca57cdb5cb2a12ae16
Wenn Sie es einfügen, sieht es so aus. Ärgerliche Wellenlinien kommen heraus. Um es anders herum auszudrücken, diese nervige Wellenlinie ist das ultimative Verdienst, Typhinweise zu verwenden.
Variablennamen:Schimmel=Wert
i: int = 2
i = 1.1 ##type error! # 1.Fehler, weil 1 float ist
Wenn Sie einen anderen Variablentyp in den Typ einfügen, erhalten Sie eine nervige Wellenlinie. Es ist ärgerlich, also lasst es uns beheben.
f: float = 1.0
f = 1 #1 ist vom Typ int, aber besetzt(Typkonvertierung)Führt nicht zu einem Fehler
c: complex = 1 + 2j
s: str = 'hoge'
byte: bytes = b'test'
b: bool = True
Die hier vorgestellten Typen sind großartige Typen, die andere Typen als Typargumente (wie Argumente) verwenden. Geben Sie sozusagen Abstraktion und Programmierung ein. Beschreiben Sie die Eingabe.
import typing
Die Notation lautet wie folgt.
Variablennamen:Modellname[Typ Argument] =Wert
lst: typing.List[int] = [1, 2, 3]
lst2: list[int] = [0,1,2] # Python3.Notation, die nach 9 verwendet werden kann
Wenn Sie sich fragen, ob Sie eine Liste mit etwas mehr Freiheit erstellen können, wird sie später veröffentlicht.
st: typing.Set[int] = {1, 2, 3}
Listen Sie alle Typen auf.
tpp: typing.Tuple[int, bool, str] = (1, True, 'test')
Diktieren [Schlüsseltyp, Werttyp]
dic: typing.Dict[str, int] = {'name': 1, 'age': 2}
dic1: dict[str, int] = {'test': 1} # Python3.Notation, die nach 9 verwendet werden kann
Dies sind gute Nachrichten für diejenigen, die der Meinung sind, dass komplizierte Wörterbücher nicht verwendet werden können. Später wird es eine Möglichkeit geben, genauer zu spezifizieren.
Ich denke, es war ungefähr zu der Zeit, als ich dachte, dass Typinformationen eine lange Zeit waren. Es gibt einen Typalias, der als variable Version eines Typs für diejenigen bezeichnet werden kann, die ungeduldig sind, oder für diejenigen, die pragmatisch sind und die von ihnen erstellten Typen auf leicht verständliche Weise benennen und verwalten möchten.
TupleIBS = typing.Tuple[int, bool, str]
Union [Typ 1, Typ 2, Typ 3 ...] Es kann sich um einen der im Typargument aufgeführten Typen handeln.
uni: typing.Union[int, bool] = 1
uni = False
uni3: int | bool = 1 # Python3.Notation, die ab 10 verwendet werden kann
Die Formen können für eine noch größere Wirkung kombiniert werden. Früher habe ich eine flexiblere Liste erwähnt. Lass es uns hier machen.
list_ib: typing.List[typing.Union[int, bool]] = [1, True, 2, False]
Es ist eine göttliche Funktion. ~~ Es ist eine göttliche Funktion, so dass Sie nicht verstehen, warum es im japanischsprachigen Raum nur wenige Referenzen gibt. Leckst du ~~ Die Leistung der PyCon JP2020 wurde erwähnt. Kurz gesagt, es ist ein konstanter Typ. Eine eingeschränktere Typendarstellung ist möglich. Zusätzlich gibt es eine Aufzählungsfunktion. stark.
li1: typing.Literal[1] = 1 #Wirkliche Konstante
li2: typing.Literal['hoge', 'fuga'] = 'fuga' #Mehrfachbeschreibungen sind möglich
li2 = 'hoge'
Sie können unveränderlich (universell) ausdrücken. Es gibt jedoch einige Fallstricke.
c: typing.Final[str] = 'c'
c = 'a' ##type error!
lis: typing.Final[typing.List[int]] = [1,2,3]
lis[1] = 1 #Kein Fehler
Lassen Sie uns in solchen Fällen gehorsam Tupel verwenden.
Sie können das Wörterbuch feiner eingeben. Und wenn Sie dies sorgfältig lesen und tatsächlich schreiben, werden Sie den Komfort des Typsystems finden.
#Beschreiben Sie die Typinformationen des Wörterbuchs anhand der Klassennotation
class UserDict (typing.TypedDict): #TypedDict erben
name: str
age: Optional[int] #Keine Aktivieren ≒ Union[int, None]
sex: typing.Literal['men', 'women', 'other']
users: typing.List[UserDict] = [
{
'name': 'noji', #Nur Zeichenfolge
'age': 33, #Nur numerisch oder keine
'sex': 'men' #"Kan" kann nicht eingegeben werden. Eingabehilfe ist ebenfalls effektiv.
},
{
'name': 'superwomen',
'age': None,
'sex': 'women'
}
]
Dieses Mal erklärte ich die Grundtypen (fast keine Klassen). Ich denke, Sie können sehen, dass die Bedeutung des Typs programmierbar ist und einen nützlichen Kommentar, der auch für die IDE funktioniert. Selbst wenn Sie nur daran denken, können Sie sich das als ** Eingrenzen der Auswahl von Wörterbuchtypen und Argumenten ** vorstellen. Der Literal-Typ ist sehr nützlich, wenn Sie Optionen als Zeichenfolge angeben. Dies reduziert auch Ihre Sorgen beim Aufnehmen und Verwenden eines JSON, dessen Form bekannt ist. Wenn Sie den Typ kennen, funktioniert die Intelligenz, sodass sie auch dann perfekt ist, wenn Sie eine Klasse verwenden, mit der Sie nicht vertraut sind. Ich bin froh, dass ich flexibel tippen kann, weil ich die Sprache eingegeben habe, die ursprünglich keinen Typ hatte.
Mit einer Form können Sie mit ein wenig Aufwand viel Spaß haben. Es wird eine große Hilfe sein, die Faulheit der drei großen Tugenden der Programmierer zu meistern. Lassen Sie uns jetzt einfach und unterhaltsam mit Formen programmieren.
Aber es ist verrückt. Manchmal leide ich an Schimmelpilzen. Ich möchte nur Logik schreiben, warum bekämpfe ich diesen Typfehler? Mögen. Nehmen wir in einem solchen Fall an, dass es in Ordnung ist, Kompromisse einzugehen.
Solange Sie die Variable nicht einmal neu schreiben, funktioniert ** Typinferenz ** effektiv, sodass Sie sich nicht die Mühe machen müssen, den Typ zu schreiben. Tatsächlich schreibe ich auch nur die folgenden Typinformationen.
boo = True #Die IDE schließt automatisch, dass es sich um einen Bool-Typ handelt, und wirkt darauf rasiert
boo = 1 #Der Typ ändert sich jedoch zum Zeitpunkt des Umschreibens (oder wird zu Beliebig).
Wenn Sie die Typinformationen nicht haben oder Probleme haben, versuchen Sie es. Warum ist es so nützlich? Missbrauch ist strengstens untersagt, da er gewaltsam umgewandelt werden kann.
i3: int = typing.cast(int, 1.0)
Dies ist die Welt von Python ohne Typhinweise. Es ist eine ziemlich starke Droge.
ani: typing.Any = 1
ani = 'hoge'
ani = ['fuga', 129999, True]
Recommended Posts