Hash () meetod tagastab objekti räsiväärtuse, kui see on olemas.
Räsi väärtused on vaid täisarvud, mida kasutatakse sõnastiku võtmete võrdlemiseks sõnastiku kiirotsingu ajal.
Sisemiselt hash()kutsub __hash__()meetod välja objekti meetodi, mis on vaikimisi määratud mis tahes objektile. Vaatame seda hiljem.
Meetodi süntaks hash()on:
räsi (objekt)
räsi () parameetrid
hash() meetod võtab ühe parameetri:
- objekt - objekt, mille räsiväärtus tagastatakse (täisarv, string, ujuk)
Räsi () tagastusväärtus
hash() meetod tagastab objekti räsiväärtuse, kui see on olemas.
Kui objektil on kohandatud __hash__()meetod, kärbib see tagastatava väärtuse suuruseks Py_ssize_t.
Näide 1: Kuidas hash () Pythonis töötab?
# 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'))
Väljund
Hash for 181 on: 181 Hash for 181.23 is: 530343892119126197 Hash for Python is: 2230730083538390373
Näide 2: räsi () muutumatule kahele objektile?
hash() meetod töötab ainult muutumatute objektide korral kahekordsena.
# tuple of vowels vowels = ('a', 'e', 'i', 'o', 'u') print('The hash is:', hash(vowels))
Väljund
Räsi on: -695778075465126279
Kuidas räsi () kohandatud objektide puhul töötab?
Nagu eespool öeldud, hash()kutsub __hash__()meetod sisemiselt meetodit. Niisiis võivad kõik objektid __hash__()kohandatud räsiväärtuste korral alistada .
Kuid räsimise õigeks rakendamiseks __hash__()peaks alati tagastama täisarv. Ja tuleb rakendada nii mõlemaid __eq__()kui ka __hash__()meetodeid.
Allpool on toodud õige __hash__()alistamise juhtumid .
| __eq __ () | __hash __ () | Kirjeldus |
|---|---|---|
| Määratletud (vaikimisi) | Määratletud (vaikimisi) | Kui see jäetakse seisma, võrreldakse kõiki objekte ebavõrdsena (välja arvatud nad ise) |
| (Kui muudetav) Määratletud | Ei tohiks määratleda | Räsitava kogumise rakendamine nõuab, et võtme räsi väärtus oleks muutumatu |
| Ei ole defineeritud | Ei tohiks määratleda | Kui __eq__()seda pole määratletud, __hash__()ei tohiks seda määratleda. |
| Määratletud | Ei ole defineeritud | Kursuse eksemplare ei saa kasutada räsitavate kogudena. __hash __ () implitsiit on seatud väärtusele None. Tõstab TypeErrorerandi, kui proovitakse räsi hankida. |
| Määratletud | Hoidke vanema juures | __hash__ = .__hash__ |
| Määratletud | Ei taha räsida | __hash__ = None. Tõstab TypeError erandi, kui proovitakse räsi hankida. |
Näide 3: räsi () kohandatud objektide jaoks, asendades __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))
Väljund
Räsi on: 3785419240612877014
Märkus. Te ei pea __eq__()räsi meetodit rakendama, kuna see luuakse vaikimisi kõigi objektide jaoks.








