【问题标题】:Immutable hashable list with correct typings具有正确类型的不可变哈希列表
【发布时间】:2020-10-02 21:04:59
【问题描述】:

我需要使用项目序列作为 dict 键并使用 List[...] 类型。如果我使用tuple,那么它不会使用List[...] 类型并且我不能使用Tuple[...] 类型,因为元组长度未知。

是否有任何类(可能来自第 3 方包)类似于可散列冻结列表?

【问题讨论】:

  • 这能回答你的问题吗? Hashing arrays in Python
  • @YannickFunk,所以我需要继承list 并手动提供__hash__ 方法?有没有我可以为此安装的软件包,它也可以冻结列表?不幸的是frozenlist 包不提供开箱即用的散列(

标签: python mypy hashable


【解决方案1】:

List[T] 的不可变等价物是 Tuple[T, ...]

来自Python documentation

要指定同构类型的可变长度元组,请使用文字省略号,例如Tuple[int, ...]。一个普通的Tuple 等价于Tuple[Any, ...],然后又等价于tuple

【讨论】:

    【解决方案2】:

    frozenlist 包似乎需要功能

        def __hash__(self):
            if self._frozen:
                return hash(tuple(self))
            else:
                raise RuntimeError("Cannot hash unfrozen list.")
    

    但此代码不包含在任何版本中(当时为 1.0.0 和 1.0.0a0)。检查情况是否会有所改善。这是我创建的issue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多