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。