„Python“ maišos ()

Maišos () metodas grąžina objekto maišos vertę, jei jis ją turi.

Maišos reikšmės yra tik sveiki skaičiai, kurie naudojami norint greitai palyginti žodyno raktus ieškant žodyno raktų.

Viduje hash()metodas reikalauja __hash__()objekto metodo, kuris pagal numatytuosius nustatymus nustatomas bet kuriam objektui. Mes tai pažiūrėsime vėliau.

hash()Metodo sintaksė yra:

 maišos (objektas)

maišos () parametrai

hash() metodas apima vieną parametrą:

  • objektas - objektas, kurio maišos reikšmė turi būti grąžinta (sveikasis skaičius, eilutė, plūdė)

Grąžinimo vertė iš maišos ()

hash() metodas grąžina objekto maišos vertę, jei ji ją turi.

Jei objekte yra pasirinktinis __hash__()metodas, jis sutrumpina grąžinimo vertę iki dydžio Py_ssize_t.

1 pavyzdys: Kaip „hash“ () veikia „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'))

Rezultatas

 Hash for 181 yra: 181 Hash for 181.23 is: 530343892119126197 Hash for Python is: 2230730083538390373 

2 pavyzdys: nekintamo paketo objekto maiša ()?

hash() metodas tinka tik nekintamiems objektams kaip dvigubam.

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

Rezultatas

 Maiša yra: -695778075465126279

Kaip maiša () veikia pasirinktiniams objektams?

Kaip minėta aukščiau, hash()metodas vidiniu būdu vadina __hash__()metodą. Taigi, bet kokie objektai gali nepaisyti __hash__()pasirinktinių maišos verčių.

Tačiau norint teisingai pritaikyti maišos, __hash__()visada reikia pateikti sveikąjį skaičių. Ir abu, __eq__()ir __hash__()metodai turi būti įgyvendinti.

Toliau pateikiami teisingo __hash__()nepaisymo atvejai .

Objektų pritaikyto maišos diegimo atvejai
__eq __ () __hash __ () apibūdinimas
Apibrėžta (pagal numatytuosius nustatymus) Apibrėžta (pagal numatytuosius nustatymus) Jei paliekama tokia, kokia yra, visi objektai lyginami nevienodai (išskyrus save)
(Jei keičiama) Apibrėžta Neturėtų būti apibrėžta Norint pritaikyti maišos rinkimą, reikia, kad rakto maišos vertė būtų nekintama
Neapibrėžtas Neturėtų būti apibrėžta Jei __eq__()nėra apibrėžta, __hash__()neturėtų būti apibrėžta.
Apibrėžta Neapibrėžtas Kurso egzemplioriai nebus naudojami kaip maišos kolekcija. __hash __ () implicitiškumas nustatytas į None. Suteikia TypeErrorišimtį, jei bandoma gauti maišos.
Apibrėžta Išlaikykite iš tėvų __hash__ = .__hash__
Apibrėžta Nenori maišyti __hash__ = None. Pakelia „TypeError“ išimtį, jei bandoma nuskaityti maišos.

3 pavyzdys: pritaikytų objektų maiša (), pakeisdama __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))

Rezultatas

 Maiša yra: 3785419240612877014

Pastaba: Nereikia įdiegti __eq__()maišos metodo, nes jis pagal numatytuosius nustatymus sukurtas visiems objektams.

Įdomios straipsniai...