Was sind Hash-Typen in Python?


Beste Antwort

Um Hash-Typen in Python zu verstehen, müssen Sie verstehen, was Hashing ist und warum es verwendet wird. Hier ist eine kurze Übersicht über das Hashing:

Wenn Sie ein Objekt hashen, bedeutet dies wirklich, dass Sie es über eine Funktion ausführen. Diese Funktion wird als Hash-Funktion bezeichnet. Mit dieser Hash-Funktion erhalten Sie eine eindeutige Ausgabe für eine eindeutige Eingabe. Nehmen wir zum Beispiel an, wir haben eine Hash-Funktion namens Hash und zwei Variablen a und b, so dass a! = B, dann Hash (a)! = Hash (b). Theoretisch sowieso. In der Praxis werden Sie laufen in eine Hash-Kollision. Das bedeutet a! = B, aber Hash (a) == Hash (b). Ein Beispiel wäre, wenn Ihre Hash-Funktion x mod 10 ist, dann Hash (12) == Hash (2). Es gibt verschiedene Möglichkeiten, dies zu handhaben.

Python verwendet dies zum Speichern von Schlüsseln in Wörterbüchern. Die Art und Weise, wie sie dies tun, ist, dass sie das Objekt hashen, dann den Hash einem Index in einem Array zuordnen und dann den Wert dort ablegen. Nehmen wir zum Beispiel an, Sie möchten „123“ unter der Taste „abc“ speichern. Nehmen wir an, Python hat ein Array für ein Wörterbuch auf 10 initialisiert. Python führt Hash (abc) und dann Mod aus es um 10, um es in ein Wörterbuch zu setzen. Nehmen wir an, Hash (abc) gibt 1234 zurück. Python modifiziert das dann um 10, um 4 zu erhalten. Dann setzt es „123“ in Index 4.

Im Grunde ist ein Hash-Typ also nur ein Typ, der Sie können eine Funktion hashen, indem Sie \_\_hash\_\_ und \_\_eq\_\_ in Python überschreiben. Sie müssen jedoch vorsichtig sein, um sicherzustellen, dass der Hash jedes Mal dasselbe zurückgibt, wenn er dasselbe Objekt erhält. Wenn Sie beispielsweise \_\_hash\_\_ eine Zufallszahl zurückgeben Jedes Mal, wenn Sie es aufrufen, werden Sie Ihr Objekt nie wieder in einem Hash finden. Gleichzeitig möchten Sie nicht für jedes Objekt das Gleiche zurückgeben, da Sie dann viele Fehlalarme erhalten.

Natürlich ist dies etwas komplizierter und äußerst Kurzer Überblick, aber dies sind die Grundlagen für das Hashing.

Antwort

Dies ist eine schwierige Frage (aber eine gute). Im amerikanischen Englisch kann die Frage als „Liste aller Dinge, die die Python-Sprache nicht kann“ gelesen werden. Das ist (für mich) schwierig, weil ich nicht genug weiß, um sie alle aufzulisten. Im Folgenden habe ich einige Dinge aufgelistet, die Python nicht kann. Weitere Informationen finden Sie in allen anderen Antworten.

  1. Python funktioniert nicht für Gerätetreiber. Gerätetreiber müssen superschnell und extrem reaktionsschnell sein. Python ist es auch nicht. Gerätetreiber müssen eigenständig ausgeführt werden. Python hat ein großes Laufzeitsystem. Python verwendet ein Garbage Collection-System ähnlich wie Java. In einigen Fällen sind Pausen für die Speicherbereinigung unerträglich.
  2. Python kann auf einigen wirklich kleinen Computern nicht verwendet werden. Einige Computer (wie Arduino im Allgemeinen) sind für Python einfach zu klein. Python verfügt über eine Laufzeitbibliothek, die für einige Computer zu viel Speicher benötigt. Es gibt so etwas wie MicroPython. Selbst MicroPython benötigt jedoch viel mehr Speicher als einige (sehr kleine) Systeme. Beachten Sie, dass der Raspberry Pi auf Python basiert.
  3. Python wird nicht wirklich im Browser ausgeführt. Für dieses Problem gibt es Tools und Lösungen. JavaScript ist jedoch (bei weitem) das dominierende Tool für die Front-End-Programmierung, nicht Python.
  4. Python ist nicht so portabel. Eigentlich ist Python super portabel. Sie müssen jedoch die Python-Laufzeit bereits installiert haben. Infolgedessen sind die meisten Spiele nicht in Python geschrieben. Die Installation der Python-Laufzeit ist für viele Anwendungen ein zu großes Hindernis. In dieser Hinsicht ähnelt Python Java. Java ist eigentlich sehr, sehr portabel. Sie müssen jedoch bereits eine JVM installiert haben.
  5. Python ist für einige Anwendungen zu langsam. Spiele haben sehr hohe FPS-Anforderungen und müssen eine große Anzahl von Pixeln verarbeiten. Infolgedessen sind die meisten Spiele in C / C ++ und nicht in Python geschrieben. Im Durchschnitt ist Python ungefähr 100-mal langsamer als C ++. In vielen (eigentlich) Fällen ist das kein großes Problem. Für Spiele und einige andere Anwendungen ist dies der Fall.
  6. Python ist keine Bare-Metal-Sprache. Wenn Sie direkt auf Hardware zugreifen und diese bearbeiten müssen, ist Python möglicherweise keine gute Wahl. Siehe Punkt 1 (Gerätetreiber) oben. Beachten Sie, dass Python keine echten Zeiger mit tatsächlichen Maschinenadressen enthält. Dies ist in einigen Fällen ein kritisches Problem.
  7. Python ist so ziemlich Single-Threaded (siehe die anderen Antworten). Dies ist in einigen Fällen ein großes Problem (nicht wirklich viele) und in anderen kein Problem. Beachten Sie, dass Python bei der Verwendung herkömmlicher Kerne keine besonders gute Arbeit leistet. Einige sehr wichtige Python-Bibliotheken nutzen jedoch CUDA-Kerne.

Insgesamt ist Python ein ziemlich gutes Werkzeug. Ich persönlich liebe es. Es ist jedoch nicht für alles die richtige Wahl.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.