English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python Grundtutorials

Python Flusskontrolle

Python Funktion

Python Datentypen

Python Dateioperationen

Python Objekt und Klasse

Python Datum und Zeit

Hochwertiges Wissen von Python

Python Referenzhandbuch

Verwendung und Beispiel von Python hash()

Python-Standardfunktionen

Die Methode hash() gibt den Hash-Wert eines Objekts zurück (wenn vorhanden).

Hash-Werte sind nur einige Ganzzahlen, die im Prozess der Dictionary-Suche zur Vergleich des Dictionary-Schlüssels verwendet werden.

Intern ruft die hash() Methode die Methode __hash__() des Objekts auf, die standardmäßig für alle Objekte gesetzt ist. Wir schauen uns das später an.

Die Syntax der hash() Methode ist:

hash(object)

hash() Parameter

hash() Methode nimmt einen Parameter:

  • Objekt -um den Hash-Wert zurückzugeben (Ganze, Strings, Fließkommazahlen)

hash() Wert

Die Methode hash() gibt den Hash-Wert eines Objekts zurück (wenn vorhanden).

Wenn ein Objekt eine benutzerdefinierte __hash__() -Methode hat, wird der Wert aufPy_ssize_tGröße.

Beispiel1:hash() wie funktioniert es in Python?

181hat einen Hash-Wert:181))
# Dezimal-Hash
181.23hat einen Hash-Wert:181.23))
# String-Hash
print('Der Hash-Wert von Python:', hash('Python'))

Wenn Sie das Programm ausführen, wird der Ausgabe:

181hat einen Hash-Wert: 181
181.23hat einen Hash-Wert: 579773580
Der Hash-Wert von Python: 2101984854

Beispiel2?Der Hash-Wert eines unveränderlichen Tupel-Objekts?

Die Methode hash() ist nur für unveränderliche Objekte wietuple.

# Elementartupel
vowels = ('a', 'e', 'i', 'o', 'u')
print('hash ist:', hash(vowels))

Wenn Sie das Programm ausführen, wird der Ausgabe:

hash ist: -695778075465126279

Wie wird hash() für benutzerdefinierte Objekte verwendet?

Wie bereits erwähnt, ruft die Methode hash() intern die Methode __hash__() auf. Daher kann jeder Objekt __hash__() überschreiben, um einen benutzerdefinierten Hash-Wert zu erhalten.

Für eine korrekte Hash-Implementierung sollte __hash__() jedoch immer ein Integer zurückgeben. Und es muss sowohl __eq__() als auch __hash__() implementiert werden.

Hier ist die korrekte Überladung von __hash__().

Beispiel einer benutzerdefinierten Hash-Implementierung für Objekte
__eq__()__hash__()Beschreibung

Definiert (standardmäßig)

Definiert (standardmäßig)

Wenn alles so bleibt, sind alle Objekte ungleich (außer sie selbst)

(wenn veränderlich) definiert

Sollte nicht definiert werden

Um einen hashbaren Satz zu implementieren, müssen die Hash-Werte der Schlüssel unveränderlich sein

Nicht definiertSollte nicht definiert werdenWenn __eq__() nicht definiert ist, sollte __hash__() nicht definiert werden.
DefiniertNicht definiert

Beispielklasse kann nicht als hashbarer Sammlung verwendet werden.

__hash__() wird implizit aufNone

Wenn Sie versuchen, einen Hash-Wert abzurufen, wird eine TypeError-Ausnahme ausgelöst.

DefiniertVon der Elternklasse beibehalten__hash__ = <ParentClass>.__hash__
DefiniertNicht hashbar

__hash__ = None

Wenn Sie versuchen, einen Hash-Wert abzurufen, wird eine TypeError-Ausnahme ausgelöst.

Beispiel3:Durch Überschreiben von __hash__() können Sie den Hash-Wert eines benutzerdefinierten Objekts abrufen

class Person:
    def __init__(self, age, name):
        self.age = age
        self.name = name
    def __eq__(self, other):
        return self.age == other.age and self.name == other.name
    def __hash__(self):
        print('hash ist:')
        return hash((self.age, self.name))
person = Person(23, 'Adam')
print(hash(person))

Wenn Sie das Programm ausführen, wird der Ausgabe:

hash ist:
3785419240612877014

Hinweis:Sie müssen nicht die __eq__()-Methode für Hash-Werte implementieren, da dies standardmäßig für alle Objekte erstellt wird.

Python-Standardfunktionen