jax.tree_util.KeyEntry#
- jax.tree_util.KeyEntry = ~KeyEntry#
类型变量。
用法
T = TypeVar('T') # Can be anything A = TypeVar('A', str, bytes) # Must be str or bytes
类型变量主要用于静态类型检查器的便利。它们充当泛型类型的参数以及泛型函数定义的参数。有关泛型类型的更多信息,请参阅类 Generic。泛型函数的工作原理如下
- def repeat(x: T, n: int) -> List[T]
‘’’返回一个包含 n 个对 x 的引用的列表。’’’ return [x]*n
- def longest(x: A, y: A) -> A
‘’’返回两个字符串中较长的一个。’’’ return x if len(x) >= len(y) else y
后一个示例的签名本质上是 (str, str) -> str 和 (bytes, bytes) -> bytes 的重载。另请注意,如果参数是 str 的某个子类的实例,则返回类型仍然是普通 str。
在运行时,isinstance(x, T) 和 issubclass(C, T) 将引发 TypeError。
使用 covariant=True 或 contravariant=True 定义的类型变量可用于声明协变或逆变泛型类型。有关更多详细信息,请参阅 PEP 484。默认情况下,泛型类型在其所有类型变量中都是不变的。
可以对类型变量进行内省。例如
T.__name__ == ‘T’ T.__constraints__ == () T.__covariant__ == False T.__contravariant__ = False A.__constraints__ == (str, bytes)
请注意,只有在全局范围内定义的类型变量才能被序列化(pickle)。