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()”和“+= []”有啥区别?