Metoda hash() Pythonu
Funkce hash() v Pythonu je vestavěná funkce a vrací hash hodnotu objektu, pokud nějakou má. Hodnota hash je celé číslo, které se používá k rychlému porovnání klíčů slovníku při pohledu na a slovník .
Syntaxe funkce hash() v Pythonu
Syntaxe: hash(obj)
Parametry: obj: Objekt, který potřebujeme převést na hash.
Vrátí: Pokud je to možné, vrátí hašovanou hodnotu.
Vlastnosti funkce hash().
- Objekty hashované pomocí hash() jsou nevratné, což vede ke ztrátě informací.
- hash() vrací hašovanou hodnotu pouze pro neměnné objekty, proto může být použit jako indikátor pro kontrolu proměnných/neměnných objektů.
- Pro zabezpečení v Pythonu můžeme zakódovat data pomocí funkce hash().
Příklady funkcí hash() Pythonu
Příklad 1: Ukázka fungování hash()
V tomto příkladu používáme funkci hash() k tisku hodnoty hash celého čísla, řetězce a float pomocí hash() v Krajta .
Python3
# initializing objects> int_val> => 4> str_val> => 'techcodeview.com'> flt_val> => 24.56> # Printing the hash values.> # Notice Integer value doesn't change> # You'll have answer later in article.> print> (> 'The integer hash value is : '> +> str> (> hash> (int_val)))> print> (> 'The string hash value is : '> +> str> (> hash> (str_val)))> print> (> 'The float hash value is : '> +> str> (> hash> (flt_val)))> |
Výstup
The integer hash value is : 4 The string hash value is : 4349415460800802357 The float hash value is : 1291272085159665688
Příklad 2: Demonstrace vlastnosti hash()
Tento kód Pythonu ukazuje, jak hash()> funkce se chová s neměnné a proměnlivé předměty . Nejprve inicializuje n-tici a seznam se stejnými prvky. Kód úspěšně vytiskne hodnotu hash n-tice. Když se však pokusí vytisknout hodnotu hash seznamu, která je měnitelná, vyvolá a TypeError> protože měnitelné objekty, jako jsou seznamy, nelze přímo hašovat.
Python3
# initializing objects> # tuple are immutable> tuple_val> => (> 1> ,> 2> ,> 3> ,> 4> ,> 5> )> # list are mutable> list_val> => [> 1> ,> 2> ,> 3> ,> 4> ,> 5> ]> # Printing the hash values.> # Notice exception when trying> # to convert mutable object> print> (> 'The tuple hash value is : '> +> str> (> hash> (tuple_val)))> print> (> 'The list hash value is : '> +> str> (> hash> (list_val)))> |
Výstup:
The tuple hash value is : 8315274433719620810
Výjimky:
Traceback (most recent call last): File '/home/eb7e39084e3d151114ce5ed3e43babb8.py', line 15, in print ('The list hash value is : ' + str(hash(list_val))) TypeError: unhashable type: 'list' Příklad 3: hash() pro Immutable Tuple Object
Tento kód Pythonu inicializuje n-tici s názvem var> obsahující znaky ‚G‘, ‚E‘, ‚E‘ a ‚K‘. The hash()> funkce se používá ke generování hodnoty hash pro n-tici var> . V tomto případě kód vytiskne hash hodnotu n-tice, což je jedinečné celé číslo, které představuje n-tice na základě jejího obsahu a struktury.
Python3
# hash() for immutable tuple object> var> => (> 'G'> ,> 'E'> ,> 'E'> ,> 'K'> )> print> (> hash> (var))> |
Výstup
3843673861956289951
Příklad 4: hash() on M upotřebitelný objekt
metodu hash() používanou jedním neměnným objektem, pokud ji použijeme na proměnlivý objekt, jako je seznam, sada, slovníky, vygeneruje chybu.
Python3
l> => [> 1> ,> 2> ,> 3> ,> 4> ]> print> (> hash> (l))> |
Výstup
TypeError: unhashable type: 'list'
Příklad 5: hash() na vlastním objektu
Zde přepíšeme metody __hash()__ pro volání hash() a metoda __eq__() zkontroluje rovnost dvou vlastních objektů.
Python3
class> Emp:> > def> __init__(> self> , emp_name,> id> ):> > self> .emp_name> => emp_name> > self> .> id> => id> > def> __eq__(> self> , other):> > > # Equality Comparison between two objects> > return> self> .emp_name> => => other.emp_name> and> self> .> id> => => other.> id> > def> __hash__(> self> ):> > > # hash(custom_object)> > return> hash> ((> self> .emp_name,> self> .> id> ))> emp> => Emp(> 'Ragav'> ,> 12> )> print> (> 'The hash is: %d'> %> hash> (emp))> # We'll check if two objects with the same> # attribute values have the same hash> emp_copy> => Emp(> 'Ragav'> ,> 12> )> print> (> 'The hash is: %d'> %> hash> (emp_copy))> |
Výstup
The hash is: 7627717261227283506 The hash is: 7627717261227283506