Den Typ mit Python beherrschen? (Wann ist eine Typprüfung durchzuführen?)

Ursprünglich habe ich es im Kommentar des folgenden Artikels geschrieben, aber ich fand es zu aggressiv, um es in den Kommentar zu schreiben, also habe ich es hierher verschoben. Beherrschen von Typen mit Python [Python 3.9-kompatibel]

Es ist ein bekannter Artikel, der nur religiöse Kontroversen hervorrufen wird.

In letzter Zeit sind die Vorteile der statischen Typisierung (oder die Nachteile der dynamischen Typisierung?) Beliebt geworden, und TypeScript ist populär geworden, und sogar Python kann statische Typprüfungen durchführen. Ich persönlich mache jedoch "unnötiges Tippen" (in einigen Fällen eher "Typen, die sogar schädlich erscheinen") (insbesondere in der statischen Typprüfungsfunktion, die später zur dynamisch getippten Sprache hinzugefügt wurde). Ich habe das Gefühl, dass der Code zunimmt.

Beherrschen von Typen mit Python [Python 3.9-kompatibel] Im Artikel

def add(a, b):
    """Gibt das Ergebnis des Hinzufügens von Argumenten zurück"""
    return a + b

Mit einer Form

def add_type(a: int, b: int) -> int:
    """Gibt das Ergebnis des Hinzufügens von Argumenten zurück"""
    return a + b

Ein Beispiel wird angezeigt.

In diesem Beispiel sollte der Typ jedoch nicht geschrieben werden ***. Es ist nicht gut, den Typ unnötig anzugeben. In diesem Fall reicht jeder Typ aus, der für die Operation "a + b" sinnvoll ist, und ich denke, es ist ein "schlechter" Programmierstil, int anzugeben. Natürlich verstehe ich, dass das Obige nur ein Beispiel ist, aber ich denke immer noch, dass dieses Beispiel "als Beispiel unangemessen" ist.

In welchen Fällen ist es unpraktisch,> int anzugeben?

Nachdem Sie verstanden haben, dass die Realität mit der idealen Theorie nicht ausreicht, wenn Sie über die ideale Theorie sprechen,

*** Sollte für Schnittstellen programmiert werden, nicht für konkrete Typen ***

Deshalb.

In diesem Beispiel kann die Funktion "Hinzufügen" auf jedes Objekt angewendet werden, das die Eigenschaft (Schnittstelle) hat, die mit dem Operator "+" hinzugefügt werden kann. Natürlich unterscheidet sich die vom "+" - Operator durchgeführte spezifische Verarbeitung in Abhängigkeit von jedem spezifischen Typ (Polymorphismus), aber die "add" -Funktion ist für die "Schnittstelle" programmiert, die als "+" - Operator bezeichnet wird. Daher kenne ich den spezifischen Verarbeitungsinhalt des Operators "+" nicht (oder vielmehr sollte er nicht vom spezifischen Verarbeitungsinhalt des Operators "+" *** abhängen). Deshalb.

In diesem Beispiel sollten Sie nicht an die konkrete Form "int" gebunden sein. Wenn Sie es später in "float" anstelle von "int" ändern möchten, müssen Sie alle Schlüsselwörter "int" im Programm durch "float" ersetzen. Wird sein.

Im Übrigen halte ich es nicht für notwendig, die Argumente der Funktion "add" auf numerische Werte einzugrenzen. Für das Argument der Funktion "add" muss nur eine Schnittstelle mit dem Namen "+" definiert werden, sodass die Funktion "add" die spezielle Methode "str", "list" und sogar "add" definiert. Es ist nichts Falsches daran, eine eigene Klasse zu betreten. Um genauer zu sein, sollte die Funktion "add" *** geschrieben werden, um mit jedem Objekt zu arbeiten, das in erster Linie den Operator "+" hat.

Tatsächlich tippe ich heutzutage in der Welt der statisch typisierten Sprachen (insbesondere in C ++ und Rust) nicht so viel wie möglich (lassen Sie den Compiler automatisch auf den Typ schließen), und selbst wenn ich mich traue, zu tippen, ist es so allgemein wie möglich. Der Programmierstil zum Erstellen eines Typs verbreitet sich.

Andererseits habe ich kürzlich Code gesehen, der in Python eingegeben wurde, aber ich frage mich oft, warum solche "unnötigen Eingaben" gemacht werden. Um ehrlich zu sein, fühlt es sich an, als würden Sie sich "30 Jahre alten C ++ - Code" ansehen. Werden Python-Programmierer in den letzten 30 Jahren des Versuchs und Irrtums (und des daraus resultierenden Paradigmenwechsels) in der statisch typisierten Sprachwelt beginnen? Ich dachte.

Das Schreiben kann durchaus zu religiöser Kriegsführung führen, aber in meiner "Voreingenommenheit" sind Leute, die Python eingeben wollen, diejenigen, die Python (oder C ++ vor 20 bis 30 Jahren) noch nicht kennen. Diejenigen, die bei Java-Kenntnissen stehen geblieben sind), sondern diejenigen, die kürzlich von statisch typisierten Sprachen zu Python gewechselt sind, haben den Eindruck, dass sie Python nur ungern eingeben.

Recommended Posts

Den Typ mit Python beherrschen? (Wann ist eine Typprüfung durchzuführen?)
Überprüfen Sie das Verhalten beim Zuweisen von Python
Beherrsche den Typ mit Python [Python 3.9 kompatibel]
Beherrsche das schwache Ref-Modul in Python
Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
Überprüfen Sie das Verhalten des Zerstörers in Python
Überprüfen Sie, ob die URL in Python vorhanden ist
Überprüfen Sie, ob die Zeichen in Python ähnlich sind
Untersuchung beim Import kann nicht mit Python durchgeführt werden
Python # Überprüfen Sie die Typidentität
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Python Hinweis: Wenn der Befehl pip nicht verwendet werden kann
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Beim Import kann matplotlib.pyplot nicht in einer pyenv-virtualenv-Umgebung ausgeführt werden
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Ich habe die Referenzgeschwindigkeit überprüft, wenn ich Python-Liste, Wörterbuch und Set-Typ verwendet habe.
Wann werden die Standardargumente in Python gebunden? Wenn die Variable im Abschluss gebunden ist, wird die Auswertung verschoben.
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Finde Fehler in Python
Lösung, wenn das Bild mit tkinter [python] nicht angezeigt werden kann
Python --Überprüfen Sie den Wertetyp
Überprüfen Sie im Voraus, was passiert, wenn der Befehl ausgeführt wird
Achtung bei os.mkdir in Python
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Aktivieren Sie die Schaltfläche Überprüfen in Tkinter, damit der Eintrag bearbeitet werden kann
[Python] Überprüfen Sie die installierten Bibliotheken
Ein einfacher Grund, warum der Rückgabewert von round (2.675,2) in Python 2,67 beträgt (in Wirklichkeit sollte er 2,68 betragen ...)
Überprüfen Sie, ob der von PHP generierte Passwort-Hash in Python übereinstimmt
Ich habe einen AttributeError erhalten, als ich die offene Methode in Python verspottet habe
Moduszeile, wenn Sie den entsprechenden Python-Code in Vim öffnen
So überprüfen Sie die Speichergröße einer Variablen in Python
Ein Datensatz, den GAMEBOY mit Python nicht erstellen konnte. (PYBOY)
33 Zeichenfolgen, die in Python nicht als Variablennamen verwendet werden sollten
Zeitzonenspezifikation beim Konvertieren einer Zeichenfolge in einen Datums- / Uhrzeittyp mit Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Jupyter Notebook 6.0.2 kann nicht in der in Anaconda erstellten Python 2.7-Umgebung installiert werden
Stellen Sie sicher, dass Python eine Zeichenfolge in int konvertieren / konvertieren kann
Vergessen Sie Shebang nicht, wenn Sie Check! Ansibles dynamisches Inventar in Python schreiben!
Überprüfen Sie Python auf Speicherlecks
Abrufen der arXiv-API in Python
Suchen Sie mit Python nach externen Befehlen
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Definition des Funktionsargumenttyps in Python
Speichern Sie die Binärdatei in Python
Klicken Sie in Python auf die Sesami-API
Verhalten beim Auflisten in Python heapq
Holen Sie sich den Desktop-Pfad in Python
Laden Sie JSON-Typen dynamisch mit Python
Holen Sie sich den Skriptpfad in Python
Im Python-Befehl zeigt Python auf Python3.8
Implementieren Sie das Singleton-Muster in Python
Typ in Python angegeben. Ausnahmen auslösen
Überprüfen und verschieben Sie das Verzeichnis in Python
[Python] Seien Sie vorsichtig, wenn Sie Druck verwenden
Klicken Sie auf die Web-API in Python
Überprüfen Sie die Datenzusammenfassung in CASTable