理解TypeVar的用法

2024-06-02 08:50:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在谈到^{}时,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]

有人能解释一下TypeVar在这种情况下做了什么吗?例如,如果它可以是任何东西,为什么不给它一个值Any?如果它受到约束,为什么不给它一个Union值呢?换句话说,使用TypeVar(...)有什么用处

我想在回顾上面的内容时,它是在某类子元素的元素?例如,它可以是:

[{set1}, {set2}, {set3}, ...]

这种类型是Sequence[set] -> set

但是像这样的事情:

[1, 2, 3, ...]

将具有类型Sequence[int] -> int。除了“iterable中的项目”之外,还有其他用途吗


Tags: fromimport元素示例typing类型typevariable
1条回答
网友
1楼 · 发布于 2024-06-02 08:50:41

本上下文中TypeVar的目的是说明函数返回与参数类型相关的特定类型

例如,如果您这样做了:

a = first([1, 2, 3]) + "foo"

您将得到一个错误,因为在这个表达式中T被绑定到类型int,因此您将得到一个关于添加intstr的错误

如果像您描述的那样用Any类型注释first,这不会产生mypy错误(因此在运行时会得到一个TypeError),因为first的返回值总是Any

有关如何使用typevars的更多示例,请参见关于泛型的mypy文档:https://mypy.readthedocs.io/en/stable/generics.html

相关问题 更多 >