我很难理解为什么mypy在下面的例子中抛出错误。
import numpy as np
from typing import Sequence
def compute(x: Sequence[float]) -> bool:
# some computation that does not modify x
...
compute(np.linspace(0, 1, 10))
Mypy错误:
Argument 1 to "compute" has incompatible type "ndarray[Any, dtype[floating[Any]]]"; expected "Sequence[float]" [arg-type]
特别是,由于typing.Sequence
需要可迭代性、可逆性和索引,我认为numpy数组也应该是Sequence
。这是否与numpy数组是可变的,而Sequence
类型是不可变的这一事实有关?我注意到当我将Sequence
更改为Iterable
时,问题得到了解决。但是我需要能够在compute
中索引x
。
那么,对compute
函数进行类型提示的最佳方法是什么,以便它可以接受具有可迭代性和索引的对象?
1条答案
按热度按时间7fyelxc51#
尝试使用np.ndarray作为x的类型提示。我检查了
type(np.linspace(0, 1, 10))
,它返回了np.ndarray