Метода хасх () враћа хеш вредност објекта ако га има.
Хасх вредности су само цели бројеви који се користе за брзо упоређивање кључева речника током претраживања речника.
Интерно, hash()метода позива __hash__()методу објекта која је подразумевано постављена за било који објекат. Ово ћемо погледати касније.
Синтакса hash()методе је:
хеш (објекат)
параметри хасх ()
hash() метода узима један параметар:
- објект - објекат чија хеш вредност треба да се врати (цео број, низ, флоат)
Повратна вредност из хеша ()
hash() метода враћа хеш вредност објекта ако га има.
Ако објекат има прилагођену __hash__()методу, он скраћује повратну вредност на величину Py_ssize_t.
Пример 1: Како хасх () ради у Питхону?
# 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'))
Оутпут
Хеш за 181 је: 181 Хеш за 181.23 је: 530343892119126197 Хеш за Питхон је: 2230730083538390373
Пример 2: хасх () за непроменљиви објект корпице?
hash() метода делује само за непроменљиве објекте у облику корпе.
# tuple of vowels vowels = ('a', 'e', 'i', 'o', 'u') print('The hash is:', hash(vowels))
Оутпут
Хеш је: -695778075465126279
Како хасх () ради за прилагођене објекте?
Као што је горе речено, hash()метода интерно позива __hash__()метод. Дакле, било који објекти могу заменити __hash__()прилагођене хеш вредности.
Али за исправну имплементацију хеширања, __hash__()увек треба вратити цео број. И, __eq__()и __hash__()методе и методе морају бити примењене.
Испод су случајеви за исправно __hash__()поништавање.
| __ек __ () | __хасх __ () | Опис |
|---|---|---|
| Дефинисано (подразумевано) | Дефинисано (подразумевано) | Ако се оставе такви какви јесу, сви објекти се упоређују неједнако (осим себе) |
| (Ако је променљиво) Дефинисано | Не би требало да буде дефинисано | Имплементација хешабле колекције захтева да хеш вредност кључа буде непроменљива |
| Није дефинисано | Не би требало да буде дефинисано | Ако __eq__()није дефинисано, __hash__()не треба га дефинисати. |
| Дефинисано | Није дефинисано | Примери класе неће бити употребљиви као хасхабле цоллецтион. __хасх __ () подразумеваност постављена на None. Повећава TypeErrorизузетак ако се покуша добити хеш. |
| Дефинисано | Задржи од родитеља | __hash__ = .__hash__ |
| Дефинисано | Не жели да се хешира | __hash__ = None. Повећава изузетак ТипеЕррор ако се покуша добити хеш. |
Пример 3: хасх () за прилагођене објекте заменом __хасх __ ()
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))
Оутпут
Хеш је: 3785419240612877014
Напомена: Не морате да примените __eq__()метод за хеш, јер се он подразумевано креира за све објекте.








