Python hash ()

Metoda hash () vrne hash vrednost predmeta, če ga ima.

Vrednosti razpršitve so samo cela števila, ki se uporabljajo za hitro primerjavo slovarskih tipk med iskanjem slovarja.

hash()Metoda interno prikliče __hash__()metodo predmeta, ki je privzeto nastavljena za kateri koli objekt. To bomo pogledali kasneje.

Sintaksa hash()metode je:

 hash (objekt)

parametri hash ()

hash() metoda vzame en parameter:

  • objekt - objekt, katerega heš vrednost bo vrnjena (celo število, niz, float)

Vrnjena vrednost iz zgoščene ()

hash() metoda vrne zgoščeno vrednost predmeta, če ga ima.

Če ima objekt __hash__()metodo po meri , vrne vrednost vrne v velikost Py_ssize_t.

Primer 1: Kako hash () deluje v Pythonu?

 # 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'))

Izhod

 Hash za 181 je: 181 Hash za 181.23 je: 530343892119126197 Hash za Python je: 2230730083538390373 

Primer 2: hash () za nespremenljiv objekt tuple?

hash() metoda deluje samo za nespremenljive predmete kot nabor.

 # tuple of vowels vowels = ('a', 'e', 'i', 'o', 'u') print('The hash is:', hash(vowels))

Izhod

 Hash je: -695778075465126279

Kako hash () deluje za predmete po meri?

Kot je navedeno zgoraj, hash()metoda interno prikliče __hash__()metodo. Torej lahko kateri koli predmeti preglasijo __hash__()zgoščene vrednosti po meri.

Toda za pravilno izvedbo zgoščevanja __hash__()mora vedno vrniti celo število. Uporabiti je treba oboje __eq__()in __hash__()metode.

Spodaj so primeri za pravilno __hash__()razveljavitev.

Primeri za izvajanje razprševanja po meri za predmete
__eq __ () __hash __ () Opis
Določeno (privzeto) Določeno (privzeto) Če ostanejo takšni, kot so, se vsi predmeti primerjajo neenako (razen sebe)
(Če je spremenljivo) Določeno Ne bi smeli biti opredeljeni Izvajanje razpršenega zbiranja zahteva, da je razpršena vrednost ključa nespremenljiva
Ni določeno Ne bi smeli biti opredeljeni Če __eq__()ni definirana, __hash__()je ne bi smeli definirati.
Določeno Ni določeno Primerki predavanj ne bodo uporabni kot razpršena zbirka. __hash __ () implicitnost nastavljena na None. Poveča TypeErrorizjemo, če poskuša pridobiti zgoščeno.
Določeno Obdrži od starša __hash__ = .__hash__
Določeno Noče razpršiti __hash__ = None. Poveča izjemo TypeError, če poskuša pridobiti razpršitev.

Primer 3: hash () za predmete po meri s preglasitvijo __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))

Izhod

 Hash je: 3785419240612877014

Opomba:__eq__() Metode za zgoščevanje ni treba izvajati, saj je privzeto ustvarjena za vse predmete.

Zanimive Članki...