Modernes Tippen ab Python 3.8 Vol.1 (ohne Klasse)

Einführung

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.

Ich habe es komplett abgedeckt

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.

Zielgruppe

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.

Eigenschaften von Python-Typ-Hinweisen

In diesem Abschnitt werden die Merkmale von Python-Typhinweisen und die Verwendungszwecke beschrieben, die sich aus diesen Merkmalen ergeben.

Typinformationen werden zur Laufzeit vollständig ignoriert

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.

Bereiten Sie sich im Voraus mit VS Code vor

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. Screenshot from 2020-09-06 11-57-46.png Um es anders herum auszudrücken, diese nervige Wellenlinie ist das ultimative Verdienst, Typhinweise zu verwenden.

Wie schreibe ich einen Typ

Variablennamen:Schimmel=Wert

Grundtyp

int: Integer-Typ

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.

float: Gleitkomma

f: float = 1.0
f = 1 #1 ist vom Typ int, aber besetzt(Typkonvertierung)Führt nicht zu einem Fehler

komplex: komplexer Typ

c: complex = 1 + 2j

str: String-Typ

s: str = 'hoge'

Byte: Byte-Array

byte: bytes = b'test'

bool: boolescher Wert

b: bool = True

Typ, der ein Typargument akzeptiert

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

Liste: Liste

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.

set: eindeutige Liste

st: typing.Set[int] = {1, 2, 3}

Tupel: Array mit fester Länge mit angegebenem Typ und angegebener Länge

Listen Sie alle Typen auf.

tpp: typing.Tuple[int, bool, str] = (1, True, 'test')

Diktat: Wörterbuch

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.

Geben Sie einen Alias ein

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]

Auswählbarer Typ

Union: Aufzählungstyp

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]

Literal: Literal-Typ (* Python 3.8 oder höher)

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'

Final (* Python 3.8 oder höher)

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.

TypedDict: Typisiertes Wörterbuch (* Python 3.8 oder höher)

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'
    }
]

Zusammenfassung: Lassen Sie uns mit der Form genießen

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.

Anhang: Wenn Sie unter Schimmel leiden

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.

Typinferenz

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).

cast: Typkonvertierung

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)

Beliebig: Jeder Typ

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

Modernes Tippen ab Python 3.8 Vol.1 (ohne Klasse)
"Python AI Programmierung" ab 0 für Windows
Geschäftseffizienz von Grund auf mit Python
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Python-Eingabe
Aufbau einer explosiven Python-Umgebung ab Null (Mac)
Registrierung bei PyPI aus einer modernen Python-Bibliothek selbst erstellt
[Python] -Klasse, Instanz
Über Python, Klasse
Dynamische Eingabe von Python
SQL zu SQL
[Python] Verstehe das Klassenselbst. Lerne die Rolle des Selbst aus dem Ausführungsergebnis mit oder ohne Selbst.
MeCab von Python
Python-Klasse, Instanz
# Python-Grundlagen (Klasse)
[Python] Lesen des Django-Quellcodes Ansicht ab Null ①
Einführung in die Mathematik ab Python Study Memo Vol.1