【问题标题】:Python type hinting: when to use MutableSequence vs ListPython 类型提示:何时使用 MutableSequence 与 List
【发布时间】:2020-09-26 01:32:25
【问题描述】:

我一直在阅读有关 typing.Sequencetyping.MutableSequence 的信息。两者都没有大量的“轻松阅读”,一切都直接进入细节。

this answerCan you specify variance in a Python type annotation?

Sequence 是 List 的只读版本

这让我想知道,MutableSequence 和普通的List 有什么区别?


更多详情

我能找到的最佳来源是 Python 数据模型的 The standard type hierarchy 部分。

通过阅读Mutable sequences 部分,似乎MutableSequence 可能是List 的“父级”?

换句话说,可以互换使用它们,只是MutableSequence 限制少一点?

【问题讨论】:

  • Sequence 不是List 的只读版本。你读到的答案是错误的。
  • @user2357112supportsMonica 从阅读 Lists (docs.python.org/3.6/library/stdtypes.html#lists) 中得知“列表是可变序列”。那么我对MutableSequenceList 的超集的理解是否正确?
  • 是的,没错。
  • @IntrastellarExplorer:根据您对超集的解释,您可能会向后看; ListMutableSequence 保证功能的超集。 MutableSequence 是最低要求,但 list 可以做并非所有 MutableSequences 都能做的事情,例如list 可以容纳任何对象,而像 array.array 这样的其他可变序列仅限于特定范围内的数字类型。
  • 是的@ShadowRanger 好点。为了清楚起见,我已将问题中的措辞从“超集”更改为“父级”。

标签: python list sequence type-hinting python-typing


【解决方案1】:

MutableSequence 表示任意可变序列。例如,array.array 的实例满足 MutableSequence

List 只是列表。如果对象不是列表,则不满足List

当你想表达“可变序列”时,使用MutableSequence。当你想表达“列表”时,使用List

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2020-08-22
    • 2021-12-25
    • 2022-09-29
    相关资源
    最近更新 更多