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