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 化。