做多语言网站不会翻译怎么办,福田欧曼服务站电话,做语文题的网站,媒体网站推广法文章目录 1. 前置知识#xff1a;哈希是什么2. 可哈希和不可哈希对象的定义2.1可哈希2.2 不可哈希 3. 对象的哈希方法3.1 自定义对象的哈希方法3.2 可哈希性与等价性3.3 哈希值的用途 推荐 在复习可变对象和不可变对象时#xff0c;学到了这个内容 1. 前置知识#xff1a;哈… 文章目录 1. 前置知识哈希是什么2. 可哈希和不可哈希对象的定义2.1可哈希2.2 不可哈希 3. 对象的哈希方法3.1 自定义对象的哈希方法3.2 可哈希性与等价性3.3 哈希值的用途 推荐 在复习可变对象和不可变对象时学到了这个内容 1. 前置知识哈希是什么
哈希Hashing是一种将任意大小的数据转换成固定大小的数据的过程。这种转换通过哈希函数实现它接收输入或“消息”并返回一个通常具有固定长度的字符串这个字符串被称为哈希值或哈希码。哈希的主要用途包括数据的快速查找、数据完整性校验、以及安全应用中的加密技术。
哈希的关键特点是
效率高哈希函数设计为能够快速处理大量数据。确定性对于同一输入总是产生相同的输出。随机分布哈希值应均匀且随机分布减少冲突。不可逆性理想的哈希函数使得从哈希值恢复原始输入极其困难。
2. 可哈希和不可哈希对象的定义
2.1可哈希
可哈希对象是指其生命周期内具有不变的哈希值的对象。这些对象可以作为字典的键或者集合的元素。整数、浮点数、字符串和元组都是可哈希的。
整数的哈希值
x 10
print(hash(x)) # 输出10的哈希值用内置的hash()函数来获取一个整数的哈希值。
2.2 不可哈希
不可哈希对象是指内容可以更改的对象因此哈希值也可能会变。列表和字典是典型的不可哈希对象。
列表的不可哈希性
my_list [1, 2, 3]
try:print(hash(my_list))
except TypeError as e:print(e) # 输出错误信息指出列表是不可哈希的由于列表是可变的Python不允许对其进行哈希。所以尝试哈希列表将抛出一个TypeError。
3. 对象的哈希方法
3.1 自定义对象的哈希方法
可哈希对象需要实现__hash__()方法该方法返回对象的哈希值。如果对象是可变的则应返回None表示对象不可哈希。
class Person:def __init__(self, name):self.name namedef __hash__(self):return hash(self.name) # 基于名字的哈希值person Person(Alice)
print(hash(person)) # 输出Alice的哈希值定义了一个Person类重写__hash__()方法使其实例可哈希。哈希函数基于人的名字来计算哈希值根据对象的某个不变属性来提供一个一致的哈希值。
3.2 可哈希性与等价性
如果两个对象的哈希值相同它们首先被视为可能相等然后通过__eq__()方法进行进一步的比较来确定是否真的相等。
实现等价性
class Product:def __init__(self, id, name):self.id idself.name namedef __hash__(self):return hash(self.id)def __eq__(self, other):return self.id other.idproduct1 Product(1, Apple)
product2 Product(1, Apple)
print(hash(product1) hash(product2)) # 输出True
print(product1 product2) # 输出TrueProduct类通过id属性来定义其哈希方法和等价性检测。只要两个产品的id相同就被认为是相等的这说明了在自定义类中如何同时实现__hash__()和__eq__()方法来保证对象可以被正确地用于字典键或集合元素。
3.3 哈希值的用途
哈希值用于快速比较对象是否相同是字典和集合高效性的关键。
字典中使用哈希值
my_dict {person: Engineer}
print(my_dict[person]) # 输出Engineer只有可哈希对象才可以作为字典的键
推荐 推荐我的相关专栏 python 错误记录python 笔记