Python 3.8中的list和List有啥区别[重复]

Posted

技术标签:

【中文标题】Python 3.8中的list和List有啥区别[重复]【英文标题】: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 中,现在内置类型支持参数化。 【参考方案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]作为类型提示不仅是说它应该是一个列表,而且该列表的成员都应该是字符串!

【讨论】:

以上是关于Python 3.8中的list和List有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中,f.readlines() 和 list(f) 有啥区别

LIST.append(1) 和 LIST = LIST + [1] (Python) 有啥区别

在 Python 中,“.append()”和“+= []”有啥区别?

List和List之间有啥区别

R中的list()和c()有啥区别,以及如何在函数中传递列表元素

list和vector有啥区别