像 numpy.intersect1d 这样的函数返回不同的类型(在本例中是一个 ndarray 或三个 ndarray 的元组),但编译器只能推断其中之一,所以如果我喜欢这样做:
intersection: np.ndarray = np.intersect1d([1, 2, 3], [5, 6, 2])
它会抛出类型警告:
Expected type 'ndarray', got 'Tuple[ndarray, ndarray, ndarray]' instead
我可以在其他语言中避免此类问题,例如 Typescript,我可以使用
as
关键字来断言类型(不会影响运行时)。我已阅读文档并看到了 cast 函数,但我想知道是否有任何 inline 解决方案或我缺少的东西。
根据MyPy文档,有两种方法可以进行类型断言:
typing.cast(..., ...)
函数。文档说这“通常”是为了从超类型转换为子类型,但并没有说你不能在其他情况下使用它。assert isinstance(..., ...)
,但这仅适用于在运行时表示的具体类型,如 int
或 list
,而不是更复杂的类型,如无法通过 检查的
List[int]
isinstance
。由于文档没有提到任何其他进行类型断言的方法,因此似乎这些是唯一的方法。