gpt4 book ai didi

python - 代码 '_T = TypeVar(' _T')' 在 *.pyi 文件中是什么意思?

转载 作者:行者123 更新时间:2023-12-03 22:05:22 27 4
gpt4 key购买 nike

我是 Python 注释的新手(类型提示)。我注意到 pyi 中的许多类定义文件继承到 Generic[_T] , 和 _T = TypeVar('_T') .

我很困惑,_T 是什么意思?这里的意思?

from typing import Generic, TypeVar

_T = TypeVar('_T')

class Base(Generic[_T]): pass

最佳答案

我建议通读整个 built-in typing module documentation .

typing.TypeVar
基本用法
具体来说,typing.TypeVar用于指定允许多种可能的类型。如果未指定特定类型,则任何类型都是有效的。

from typing import TypeVar

T = TypeVar('T') # <-- 'T' can be any type
A = TypeVar('A', str, int) # <-- 'A' will be either str or int
但是,如果 电话 可以是任何类型,那为什么要创建 typing.TypeVar就像那样,当你可以使用 typing.Any对于类型提示?
原因是您可以确保特定的输入和输出参数具有相同的类型,如下例所示。
字典查找示例
from typing import TypeVar, Dict
Key = TypeVar('Key')
Value = TypeVar('Value')

def lookup(input_dict: Dict[Key, Value], key_to_lookup: Key) -> Value:
return input_dict[key_to_loopup]
这乍一看似乎是一个微不足道的例子,但这些注释要求输入字典中的键类型与 key_to_lookup 相同。参数,并且输出的类型也与字典中的值的类型相匹配。
键和值作为一个整体可以是不同的类型,对于这个函数的任何特定调用,它们可以是不同的(因为键和值不限制类型),但对于给定的调用,字典的键必须匹配查找键的类型,值和返回类型相同。
附加示例
如果您创建一个新的 TypeVar 并将类型限制为 float 和 int:
B = TypeVar('B', float, int)

def add_x_and_y(x: B, y: B) -> B:
return x + y
该函数要求 x 和 y 要么都是浮点数,要么都是 int,并且必须返回相同的类型。如果 x 是一个浮点数而 y 是一个整数,则类型检查应该会失败。

typing.Generic
我对这个比较粗略,但 typing.Generic (链接到官方文档)抽象基类 (ABC) 允许设置具有已定义类型提示的类。他们在链接的文档中有一个很好的例子。
在这种情况下,他们正在创建一个完全通用的类型类。如果我理解正确,这允许使用 Base[AnyName]作为代码中其他地方的类型提示,然后可以重用 AnyName在同一定义中的其他地方表示同一类型。
我想这有助于避免使用 TypeVar重复,您基本上可以通过使用 Base 类作为类型提示来随意创建新的 TypeVars,只要您只需要它用于该本地定义的范围即可。

关于python - 代码 '_T = TypeVar(' _T')' 在 *.pyi 文件中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57551899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com