【问题标题】:What's the difference between list and List in Python 3.8 [duplicate]Python 3.8中的list和List有什么区别[重复]
【发布时间】:2022-01-14 01:13:54
【问题描述】:

对于类型注释,在Python 3.8 和更早的版本中,明确要求将List 作为有效类型导入。所以,我们必须做类似from typing import List 之类的事情。

为什么我们必须创建一个新类型List,而不是使用前Python 3.9中的内置list类型?

【问题讨论】:

  • 因为list不能被参数化,因为list[whatever]会抛出一个错误。决定使用特殊类型进行注释会很麻烦,因此在 3.9 中,现在内置类型支持参数化。

标签: python list python-3.8


【解决方案1】:

list 是内置的list 类。您可以直接使用它进行注释。

typing.List是列表的类型提示,可以下标,例如:

foo: List[str] = []

这允许比list 更细粒度的类型提示,因为您可以在列表中标注预期的类型。

Since Python 3.9 内置的list 也支持订阅,这是以前不支持的。

【讨论】:

  • 他们如何在 Python 3.9 中使列表可下标?
  • 魔术! ......还有一个叫做PEP585的东西。
【解决方案2】:

typing.List 不是list - 它是通用的。您可以在打字时使用list,但您可以更具体地使用List。例如。

from typing import List


def unspecific_func(arg: list):
  return ', '.join(arg)

def specific_func(arg: List[str]):
  return ', '.join(arg)

如果您尝试执行unspecific_func([1, 3, 5]),您的类型提示将不足以告诉您这是一个错误。但是将List[str]作为类型提示不仅是说它应该是一个列表,而且该列表的成员都应该是字符串!

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 2011-05-04
    • 2019-03-15
    • 1970-01-01
    • 2012-09-26
    • 2011-04-07
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多