继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python 的内置函数 hash

2882716
关注TA
已关注
手记 70
粉丝 0
获赞 0

Python 的内置函数 hash() 用于获取对象的哈希值(hash value),它是一个固定长度的整数,代表对象的唯一标识。哈希值在 Python 中广泛应用于字典(dict)的键、集合(set)的元素等数据结构,以实现快速查找和去重。

详细说明

  1. 基本用法
    hash() 函数接受一个对象作为参数,返回其哈希值:

    hash_value = hash(object)
    

    示例:

    print(hash("hello"))  # 输出字符串 "hello" 的哈希值
    print(hash(42))       # 输出整数 42 的哈希值
    
  2. 哈希值的特性

    • 不可变性:对于不可变对象(如字符串、数字、元组等),哈希值在其生命周期内保持不变。
    • 相同对象的哈希值相同:如果两个对象相等(a == b),则它们的哈希值必须相同(hash(a) == hash(b))。
    • 快速计算:哈希值的计算通常是高效的,适合用于快速查找。
  3. 支持哈希的对象
    Python 中可哈希的对象必须是不可变的,常见的有:

    • 整数、浮点数
    • 字符串
    • 元组(仅当所有元素都是可哈希的)
      示例:
    print(hash((1, 2, 3)))  # 元组的哈希值
    # print(hash([1, 2, 3]))  # 列表不可哈希,会报错
    
  4. 自定义对象的哈希
    如果自定义类需要支持哈希,需实现 __hash__() 方法,并确保对象是不可变的(或哈希值不变)。通常与 __eq__() 方法一起定义:

    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __hash__(self):
            return hash((self.x, self.y))  # 基于坐标的元组生成哈希值
    
        def __eq__(self, other):
            return self.x == other.x and self.y == other.y
    
    p = Point(3, 4)
    print(hash(p))  # 输出自定义对象的哈希值
    
  5. 应用场景

    • 字典键:字典使用哈希值快速定位键值对。
    • 集合成员:集合依赖哈希值去重和判断成员是否存在。
    • 缓存机制:哈希值可用于快速比较对象是否相同。
  6. 注意事项

    • 可变对象(如列表、字典)不可哈希,尝试对其调用 hash() 会引发 TypeError
    • 哈希值在 Python 进程中是唯一的,但在不同运行中可能不同(Python 3.3 后默认启用随机哈希种子以增强安全性)。

示例:

# 不可哈希对象的错误示例
try:
    hash([1, 2, 3])
except TypeError as e:
    print(f"Error: {e}")  # 输出错误信息

通过合理使用 hash(),可以优化程序的性能,尤其是在需要快速查找或去重的场景中。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP