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.
| __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.








