有没有任何官方方法,使用Python的类型提示系统来指示函数返回与其输入等效或相同的值?
我知道类型提示通常不关心值,但对于“函数返回其输入或某些
==
到其输入”的特定情况进行值键入会很有用。
我希望得到类似
TypeVar
的东西,但它也包含反映注释函数签名的信息(至少有一些官方支持,例如 PyCharm/MyPy/等),类似于:
身份:
from typing import Identity
# Identity[0] indicates "returns the positional argument at index 0".
# Identity['foo'] would indicate "returns the kwarg named 'foo'".
def foo(arg1, arg2) -> Identity[0]:
return arg1
foo(object()) # Passes type checking
foo(1) # Fails type checking, as "is" identity won't work on all ints
等价:
from typing import Equivalent
def foo(arg1: int) -> Equivalent[0]:
return (arg1 - 1) + 1
Equivalent
很大程度上是一个无操作,除了验证其参数在给定函数签名的情况下是否有意义之外。
这种事存在吗?如果不可行,是否可行或误导?
TypeVar
并不能完全满足这里的需要;它可以指示输出类型与输入类型相同,但不关心值。
我知道值约束类型系统很复杂并且在 Python 中不受支持,但我想知道对于相等/相同返回值的特定情况是否有例外。
像这样:
T = TypeVar('T')
def iden(x: T) -> T:
return x