草庐IT

开散列

全部标签

python - Python 函数为什么以及如何是可散列的?

我最近在Python中尝试了以下命令:>>>{lambdax:1:'a'}{>:'a'}>>>defp(x):return1>>>{p:'a'}{:'a'}dict的成功创建表明lambda和常规函数都是可散列的。(类似{[]:'a'}失败并出现TypeError:unhashabletype:'list')。哈希显然不一定是函数的ID:>>>m=lambdax:1>>>id(m)140643045241584>>>hash(m)8790190327599>>>m.__hash__()8790190327599最后一条命令表明__hash__方法是为lambda显式定义的,也就是说,这

python - 为什么 Python 集合不可散列?

我偶然发现了一篇博客文章,详细介绍了如何在Python中实现powerset函数。所以我开始尝试自己的方法,发现Python显然不能有一组集合,因为集合是不可散列的。这很烦人,因为幂集的定义是它是一组集合,而我想使用实际的集合操作来实现它。>>>set([set()])Traceback(mostrecentcalllast):File"",line1,inTypeError:unhashabletype:'set'Python集合不可散列是否有充分的理由? 最佳答案 通常,在Python中只有不可变对象(immutable对象)是

python - 为什么 Python 集合不可散列?

我偶然发现了一篇博客文章,详细介绍了如何在Python中实现powerset函数。所以我开始尝试自己的方法,发现Python显然不能有一组集合,因为集合是不可散列的。这很烦人,因为幂集的定义是它是一组集合,而我想使用实际的集合操作来实现它。>>>set([set()])Traceback(mostrecentcalllast):File"",line1,inTypeError:unhashabletype:'set'Python集合不可散列是否有充分的理由? 最佳答案 通常,在Python中只有不可变对象(immutable对象)是

python - 使 python 用户定义的类可排序、可散列

在python中使用户定义的类可排序和/或可散列时需要覆盖/实现哪些方法?有哪些注意事项?我在解释器中输入dir({})以获取内置字典的方法列表。其中,我认为我需要实现一些子集['__cmp__','__eq__','__ge__','__gt__','__hash__','__le__','__lt__','__ne__']对于Python3和Python2必须实现哪些方法有区别吗? 最佳答案 我几乎将此作为对其他答案的评论发布,但它本身就是一个答案。要使您的项目可排序,它们只需要实现__lt__。这是内置排序使用的唯一方法。仅当

python - 使 python 用户定义的类可排序、可散列

在python中使用户定义的类可排序和/或可散列时需要覆盖/实现哪些方法?有哪些注意事项?我在解释器中输入dir({})以获取内置字典的方法列表。其中,我认为我需要实现一些子集['__cmp__','__eq__','__ge__','__gt__','__hash__','__le__','__lt__','__ne__']对于Python3和Python2必须实现哪些方法有区别吗? 最佳答案 我几乎将此作为对其他答案的评论发布,但它本身就是一个答案。要使您的项目可排序,它们只需要实现__lt__。这是内置排序使用的唯一方法。仅当

python - 如何将一个字符串散列成 8 位数字?

有没有我可以在不自己实现任何算法的情况下将一个随机字符串散列成一个8位数字? 最佳答案 是的,您可以使用内置的hashlib模块或内置hash功能。然后,在散列的整数形式上使用模运算或字符串切片运算去掉最后八位数字:>>>s='shesellsseashellsbytheseashore'>>>#Usehashlib>>>importhashlib>>>int(hashlib.sha1(s.encode("utf-8")).hexdigest(),16)%(10**8)58097614L>>>#Usehash()>>>abs(has

python - 如何将一个字符串散列成 8 位数字?

有没有我可以在不自己实现任何算法的情况下将一个随机字符串散列成一个8位数字? 最佳答案 是的,您可以使用内置的hashlib模块或内置hash功能。然后,在散列的整数形式上使用模运算或字符串切片运算去掉最后八位数字:>>>s='shesellsseashellsbytheseashore'>>>#Usehashlib>>>importhashlib>>>int(hashlib.sha1(s.encode("utf-8")).hexdigest(),16)%(10**8)58097614L>>>#Usehash()>>>abs(has

python - 在 Python 中加盐和散列密码

此代码应该使用盐对密码进行哈希处理。盐和散列密码被保存在数据库中。密码本身不是。鉴于操作的敏感性,我想确保一切都符合犹太教规。importhashlibimportbase64importuuidpassword='test_password'salt=base64.urlsafe_b64encode(uuid.uuid4().bytes)t_sha=hashlib.sha512()t_sha.update(password+salt)hashed_password=base64.urlsafe_b64encode(t_sha.digest()) 最佳答案

python - 在 Python 中加盐和散列密码

此代码应该使用盐对密码进行哈希处理。盐和散列密码被保存在数据库中。密码本身不是。鉴于操作的敏感性,我想确保一切都符合犹太教规。importhashlibimportbase64importuuidpassword='test_password'salt=base64.urlsafe_b64encode(uuid.uuid4().bytes)t_sha=hashlib.sha512()t_sha.update(password+salt)hashed_password=base64.urlsafe_b64encode(t_sha.digest()) 最佳答案

python - 为什么 Python dict 可以有多个具有相同散列的键?

我想了解Pythonhash引擎盖下的功能。我创建了一个自定义类,其中所有实例都返回相同的哈希值。classC:def__hash__(self):return42我只是假设上述类中只有一个实例可以在dict中。任何时候,但实际上是dict可以有多个具有相同散列的元素。c,d=C(),C()x={c:'c',d:'d'}print(x)#{:'c',:'d'}#notethatthedicthas2elements我进行了更多实验,发现如果我覆盖__eq__方法使得类的所有实例比较相等,然后dict只允许一个实例。classD:def__hash__(self):return42def