Hash-metoden returnerer hash-verdien til et objekt hvis den har en.
Hash-verdier er bare heltall som brukes til å sammenligne ordbokstaster under en ordbokoppslag raskt.
Internt hash()kaller __hash__()metoden metoden for et objekt som er angitt som standard for ethvert objekt. Vi ser på dette senere.
Syntaksen for hash()metoden er:
hash (objekt)
hash () Parametere
hash() metoden tar en enkelt parameter:
- objekt - objektet hvis hash-verdi skal returneres (heltall, streng, flyt)
 
Returverdi fra hash ()
hash() metoden returnerer hash-verdien til et objekt hvis det har en.
Hvis et objekt har tilpasset __hash__()metode, avkortes returverdien til størrelsen på Py_ssize_t.
Eksempel 1: Hvordan fungerer hash () i Python?
 # hash for integer unchanged print('Hash for 181 is:', hash(181)) # hash for decimal print('Hash for 181.23 is:',hash(181.23)) # hash for string print('Hash for Python is:', hash('Python'))
Produksjon
Hash for 181 er: 181 Hash for 181,23 er: 530343892119126197 Hash for Python er: 2230730083538390373
Eksempel 2: hash () for uforanderlig tupleobjekt?
hash() metoden fungerer bare for uforanderlige gjenstander som tuple.
 # tuple of vowels vowels = ('a', 'e', 'i', 'o', 'u') print('The hash is:', hash(vowels))
Produksjon
Hashen er: -695778075465126279
Hvordan hash () fungerer for tilpassede objekter?
Som nevnt ovenfor hash()kaller __hash__()metoden internt metoden. Så, alle objekter kan overstyre __hash__()for egendefinerte hash-verdier.
Men for riktig hash-implementering, __hash__()bør alltid returnere et heltall. Og både __eq__()og __hash__()metoder må implementeres.
Nedenfor er sakene for korrekt __hash__()overstyring.
| __eq __ () | __hash __ () | Beskrivelse | 
|---|---|---|
| Definert (som standard) | Definert (som standard) | Hvis de blir liggende, sammenligner alle objekter ulikhet (unntatt seg selv) | 
| (Hvis det kan endres) Definert | Bør ikke defineres | Implementering av hashable-samling krever nøkkelens hash-verdi være uforanderlig | 
| Ikke definert | Bør ikke defineres | Hvis __eq__()ikke er definert, __hash__()bør ikke defineres. |  
| Definert | Ikke definert | Klasseinstanser kan ikke brukes som hashable-samling. __hash __ () implisitt satt til None. Hever TypeErrorunntak hvis du prøver å hente hasjen. |  
| Definert | Behold fra foreldre | __hash__ = .__hash__ |  
| Definert | Vil ikke hasj | __hash__ = None. Hever TypeError-unntaket hvis du prøver å hente hash. |  
Eksempel 3: hash () for egendefinerte objekter ved å overstyre __hash __ ()
 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('The hash is:') return hash((self.age, self.name)) person = Person(23, 'Adam') print(hash(person))
Produksjon
Hashen er: 3785419240612877014
Merk: Du trenger ikke å implementere __eq__()metoden for hashen, da den er opprettet som standard for alle objekter.








