当谈到 时Generics,python 给出了以下示例:
from collections.abc import Sequence
from typing import TypeVar
T = TypeVar('T') # Declare type variable
def first(l: Sequence[T]) -> T: # Generic function
return l[0]
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下TypeVar这种情况下的作用吗?例如,如果它可以是任何东西,为什么不直接赋予它值呢Any?如果它受到限制,为什么不给它一个Union值呢?换句话说,使用有什么用处TypeVar(...)?
我想在回顾上面的内容时,它是在某种子元素的元素时使用的?例如,它可以是:
[{set1}, {set2}, {set3}, ...]
Run Code Online (Sandbox Code Playgroud)
那种类型是Sequence[set] -> set
但像这样的事情:
[1, 2, 3, ...]
Run Code Online (Sandbox Code Playgroud)
会有类型Sequence[int] -> int。除了这个“item-in-iterable”之外还有其他用法吗?
在此上下文中的目的TypeVar是说该函数返回与参数类型相关的特定类型。
例如,如果您这样做:
a = first([1, 2, 3]) + "foo"
Run Code Online (Sandbox Code Playgroud)
你会得到一个错误,因为在这个表达式中T绑定到类型int,所以你会得到一个关于添加 anint和 a 的错误str。
如果您按照您的描述使用类型进行注释first,Any则不会产生 mypy 错误(因此您会TypeError在运行时得到 a ),因为 的返回值first始终只是Any。
有关如何使用类型变量的更多示例,请参阅有关泛型的 mypy 文档:https://mypy.readthedocs.io/en/stable/generics.html
| 归档时间: |
|
| 查看次数: |
3683 次 |
| 最近记录: |