14 python python-3.x python-typing
有什么区别和用例typing.Collection?
例如:
from typing import Collection, Iterable
foo: Collection[int] = (1, 2)
bar: Iterable[int] = (1, 2)
spam: tuple[int] = (1, 2)
Run Code Online (Sandbox Code Playgroud)
对于我来说,一切看起来都一样,我不明白为什么不使用 always list、tuple等作为类型提示。
Car*_*ate 25
这取决于您需要的对象的功能是什么。我遵循的关于类型规范的一般建议是
接受输入时指定最通用的类型,给出输出时指定最具体的类型
如果您不需要Tuple特别指定,请不要指定Tuple. 除非您绝对需要一个元组,否则通过指定会使调用者的生活变得更加困难,Tuple因为您将迫使他们要么忽略您的提示,要么在集合之间进行转换(如果他们当前拥有列表而不是元组)。
这是一个例子:
def func(tup: ???):
for n in tup:
pass
Run Code Online (Sandbox Code Playgroud)
唯一tup用于的是迭代。这意味着,按照上述建议,您应该???填写Iterable。这样,调用者可以给出元组、列表,甚至是他们的自定义类型。这并不重要,因为您的代码不关心类型;只是该对象是可迭代的。
将其与以下内容进行对比:
def func(lst: ???):
lst.append(1)
lst[2] = 5
Run Code Online (Sandbox Code Playgroud)
这需要更具体的功能;但仍然比 a 更通用list。append并且__setitem__是 ABC 的一部分MutableSequence,所以我会具体说明这一点。
我很少在类型提示输入时指定具体的集合类型。大多数时候,指定对象所需的一小部分功能很容易。另外,特别是对于元组,我仅Tuple在希望用户输入成对序列或类似内容的情况下指定。假设我有一个接受可迭代数字对的函数。我会输入提示输入为:
Iterable[Tuple[int, int]]
Run Code Online (Sandbox Code Playgroud)
我使用Tuple(或tuple现在)是因为对的大小应该固定为恰好两个。我可以接受一系列数字,但我没有任何大小“保证”。如果我要求元素的大小恰好为 2,那么指定Tuple是实现这一目标的最简洁的方法。
参考此表,然后选择最能代表您要对对象执行的操作的类型。
| 归档时间: |
|
| 查看次数: |
8397 次 |
| 最近记录: |