【问题标题】:Python typing deprecationPython 类型弃用
【发布时间】:2021-03-22 07:52:52
【问题描述】:

最新的typing docs 有很多类似如下的弃用通知:

class typing.Deque(deque, MutableSequence[T])
A generic version of collections.deque.

New in version 3.5.4.

New in version 3.6.1.

Deprecated since version 3.9: collections.deque now supports []. See PEP 585 and Generic Alias Type.

这是什么意思?我们是否应该不再使用泛型类型Deque(以及其他几个)?我查看了参考资料,并没有把这些点连起来(可能是因为我是 Python 中级用户)。

【问题讨论】:

  • 你读过 PEP 585 吗?听起来可能有解释。
  • @blorgon 我有,并更新了我的问题,说明了这一点。出于某种原因,一个模组决定应该删除我之前的评论,所以这个注释只是为了记录¯\_(ツ)_/¯

标签: python python-3.x python-typing


【解决方案1】:

这意味着您应该过渡到使用标准库中的内置类型/类型,而不是 typing 提供的类型。例如collections.deque[int] 而不是typing.Deque[int]listtuple 等也是如此。所以tuple[int, str] 是首选方式。

【讨论】:

  • 这比“collections.deque 现在支持 []”要清楚得多,这对我来说毫无意义。
  • @AbhijitSarkar - 注释试图说明的是,使用 [] 用于表示容器的包含类型。由于 collections.deque 现在支持 [] 这意味着您可以将其用作类型提示。我接受它不是那么清楚:-)
  • @TonySuffolk66 我不能代表其他人,但[] 对我来说意味着空列表。 IMO,更清晰的注释是“collections.deque 现在支持通用类型,请迁移到它”。
【解决方案2】:

请参阅 PEP585Generic Alias Type

Python 3.9 中的更改消除了 typing 模块中并行类型层次结构的必要性,因此您可以在注释类似双端队列的类型时直接使用 collections.deque

意思是

def foo(d: typing.Deque):
    ...

应改为:

def foo(d: collections.deque):
    ...

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多