从零开始学Python|您需要了解有关Python哈希的所有知识

举报
Yuchuan 发表于 2021/03/16 17:05:08 2021/03/16
【摘要】 哈希方法是Python库中最有用的模块之一。现在您已经知道了它的功能和用途,我们希望您在日常​​编码中会更频繁地使用它。因此,到本文结尾,我希望您学到了一些不错的新知识。

在当今的业务动态中,有一个可以满足您所有需求的应用程序。它可以用来跟踪您的每周游泳课程或寻找镇上最好的餐馆。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中的哈希-Edureka

结论

哈希方法是Python库中最有用的模块之一。现在您已经知道了它的功能和用途,我们希望您在日常​​编码中会更频繁地使用它。因此,到本文结尾,我希望您学到了一些不错的新知识。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。