在当今的业务动态中,有一个可以满足您所有需求的应用程序。它可以用来跟踪您的每周游泳课程或寻找镇上最好的餐馆。Python是构建许多这些应用程序的一种语言,因为它具有必须提供的广泛功能。本文将介绍一个这样的概念,即Python中的Hash。
本文将介绍以下指针,
在Python中哈希
Python是当今业界最流行的高级编程语言之一。Python建立在C平台上,是一种面向对象的编程语言,它不仅用途广泛,而且还具有许多使开发人员能够创建高级应用程序的功能。Python作为一种编程语言,带有一个内置库,该库具有数百个模块和功能。其中之一是哈希模块。在本文中,我们将讨论有关散列模块,其功能以及如何在日常编程中使用该模块的更多信息。
在深入了解此Hash In Python文章之前,让我们快速了解下面的主题,
什么是Python中的哈希方法?
Python中的哈希方法是一个模块,用于返回对象的哈希值。在编程中,哈希方法用于返回整数值,该整数值用于使用字典查找功能比较字典键。使用时,它调用对象的__hash __(),该默认设置是在用户创建对象的过程中设置的。
使用哈希方法的语法如下。
hash(object)
哈希方法的参数
作为模块的哈希方法仅包含单个参数。
对象:代表需要用户返回其哈希值的对象,可以是整数,字符串或浮点数。
哈希方法的返回值
使用散列方法时,如果存在对象的散列值,则返回该散列值。如果在特定情况下对象具有自定义哈希值,则该方法将哈希值截断为Py_ssize_t的大小。
让我们继续本文的“在Python中哈希”,并查看一个示例程序,在此之前,建议确保您已安装了所有必需的软件,
哈希方法示例程序
为了更好地理解hash方法的功能和用法,让我们看几个示例。
# 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
适用于Python的哈希为:3607259692854166150
对不可变元组对象使用哈希方法
# tuple of vowels
vowels = ('a', 'e', 'i', 'o', 'u')
print('The hash is:', hash(vowels))
运行时,上述程序的输出将类似于以下内容。
哈希为:-7033539107181453990
哈希如何用于自定义对象?
如前一段所述,使用hash方法时,需要调用对象的__hash __()。这意味着任何对象都可以覆盖对象的自定义哈希值。
但是,为了获得正确的哈希值,该方法始终需要返回一个整数,因此需要同时使用__eq __()和__hash __()来找到相同的值。
请参阅下表了解自定义哈希值的实现。
__eq__() |
__hash__() |
Description |
(If mutable) Defined |
Should not be defined |
This requires the key hash value to be immutable. |
Defined (by default) |
Defined (by default) |
All objects are compared as unequal. |
Not defined |
Should not be defined |
If __eq__() is not defined, then hash also doesn’t need to be defined. |
Defined |
Not defined |
__hash__() will be set to None. TypeError is raised. |
Defined |
Retain from Parent |
__hash__ = <ParentClass>.__hash__ |
Defined |
Doesn’t want to hash |
__hash__ = None TypeError is raised. |
这篇关于Python中的哈希的文章中的另一个有趣的地方是实现了“自定义对象的哈希方法”,
自定义对象的哈希方法
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))
运行时,上述程序的输出将如下所示:
哈希是:
5445254133660435902
注意:对于上述程序,__eq __()方法不需要实现,因为默认情况下会为所有对象创建__eq __()方法。
示例程序1
# Python 3 code to demonstrate
# working of hash()
# initializing objects
int_val = 4
str_val = 'PythonIsBest'
flt_val = 24.56
# Printing the hash values.
# Notice Integer value doesn't change
# You'l 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)))
上面程序的输出将是,
整数哈希值是:4
字符串哈希值是:2063534490514258345
浮点哈希值是:1291272085159665688
这将我们带到了本文的最后一部分,内容涉及“ Python中的哈希”,
示例程序2
# Python 3 code to demonstrate
# property of hash()
# 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)))
上面程序的输出将是,
结论
哈希方法是Python库中最有用的模块之一。现在您已经知道了它的功能和用途,我们希望您在日常编码中会更频繁地使用它。因此,到本文结尾,我希望您学到了一些不错的新知识。