gpt4 book ai didi

python - 拥有不可散列的类是不是 unpythonic?

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:48 26 4
gpt4 key购买 nike

我正在和我的一位同事争论,是否所有的 Python 类真的都需要是可散列的。我们有一个包含符号表达式的类(类似于 SymPy)。

我的论点是,由于我们无法比较两个表达式是否相等,因此不应允许散列。例如,表达式“(x)”和“(1*x)”可能比较相等,而“sqrt(x*x*x)”和“abs(x)*sqrt(x)”可能不相等。因此,'hash()' 在使用符号表达式调用时应该抛出错误。

他的论点是您应该能够将所有类用作字典和集合中的键。因此,它们也必须是可散列的。 (我现在把话放在他嘴里,他会解释得更好。)。

谁是对的?如果您尝试对它们进行哈希处理,是否有抛出错误的类是非 Python 的?

最佳答案

哈希函数只有在您有明确定义的相等性测试时才有用并且相等性测试所考虑的信息是不可变的。

默认情况下,所有用户定义的类都通过对象标识进行比较,并且它们使用id() 作为散列值。如果您不覆盖 == 运算符,则很少有理由更改此行为。如果您确实覆盖==,并且此运算符中考虑的信息是不可变的(意味着它在实例的生命周期内不能更改),您也可以定义哈希函数以使实例可哈希。

从您的问题来看,我无法确定这些条件是否成立。使类可散列不是“Pythonic”或“Unpythonic”——问题是类的语义是否允许散列。

关于python - 拥有不可散列的类是不是 unpythonic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11316738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com