¿Por qué y cómo las funciones de Python son hashable?

Entonces, comience con la pregunta, es decir, ¿por qué y cómo se pueden modificar las funciones de Python? Primero, uno debe saber qué significa realmente hashable en Python. Entonces, hashable es una característica de los objetos de Python que indica si el objeto tiene un valor hash o no. Si el objeto tiene un valor hash, puede usarse como clave para un diccionario o como elemento en un conjunto.

Un objeto es hashable si tiene un valor hash que no cambia durante toda su vida. Python tiene un método hash integrado ( __hash__() ) que se puede comparar con otros objetos. Para compararlo, necesita el método __eq__() o __cmp__() y si los objetos hashable son iguales, entonces tienen el mismo valor hash. Todos los objetos integrados inmutables en Python se pueden modificar como tuplas, mientras que los contenedores mutables, como listas y diccionarios, no se pueden modificar. 

Los objetos que son instancias de la clase definida por el usuario se pueden modificar de forma predeterminada, todos se comparan de forma diferente y su valor hash es su id().

Ejemplo: considere dos tuplas t1, t2 con los mismos valores y vea las diferencias:

Python3

t1 = (1, 5, 6)
 
t2 = (1, 5, 6)
 
# show the id of object
print(id(t1))
 
print(id(t2))

Producción:

140040984150664
140040984150880

En el ejemplo anterior, dos objetos son diferentes en cuanto a los tipos inmutables, el valor hash depende de los datos almacenados, no de su identificación.

Ejemplo: Veamos si las funciones lambda son hash o no.

Python3

# create a one-line function
l = lambda x : 1
 
# show the hash value
print(hash(l))
 
# show the id value
print(id(l))
 
# show the hash value
print (l.__hash__())

Producción:

-9223363246992694337
140637793303544
-9223363246992694337

Por lo tanto, las funciones lambda son hashable.

Ejemplo: Veamos si la función basada en definición definida por el usuario es hashable o no.

Python3

# create an empty function
def fun():
  pass
 
# print types of function
print(type(fun))
 
# print hash value
print(fun.__hash__())
 
# print hash value
print(hash(fun))

Producción:

<class 'function'>
-9223363242199589441
-9223363242199589441 

Por lo tanto, cualquier función definida por el usuario se puede modificar ya que su valor hash permanece igual durante su vida útil.

Publicación traducida automáticamente

Artículo escrito por urvashisaxena1997 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *