如果我们检查numpy的源代码,我们会在numpy/__init__中找到。py,ndarray
被声明为
class ndarray(_ArrayOrScalarCommon, Generic[_ShapeType, _DType_co])
numpy/_typing/_array_like。py,NDArray
定义为
NDArray = ndarray[Any, dtype[_ScalarType_co]]
NDArray
似乎是ndarray
的部分专用版本,这意味着对于ndarray
,我们可以写x: ndarray[(2, 2), np.float32] = ...
和y: ndarray[np.float32] = ...
,但对于NDArray
,我们只能写z: NDArray[np.float32] = ...
,不能添加形状信息。
那么NDArray
是必要的吗?
1条答案
按热度按时间s3fp2yjn1#
这是一种方便。你可以写:
你也可以**写:
这将 * 运行 * 刚刚好,但静态分析工具将抱怨 * 两者 *。因为这两个都是正确的类型注解。下面是一个例子,让我们创建一个python脚本
test_typing.py
:现在,让我们看看
mypy
的感受:因此,正如您所看到的,它接受了第二个,但没有接受第一个,因为第一个不是有效的注解。
为了更好地衡量,
pyright
(另一个非常流行的静态类型检查器)也抱怨: