我在文件scratch.py
中有以下代码:
import numpy as np
def my_array(arr: np.recarray) -> None:
print(arr.x)
my_array(np.rec.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')]))
运行mypy scratch.py --disallow-any-generics
会出现以下错误:
scratch.py:3: error: Missing type parameters for generic type "recarray" [type-arg]
但是,下面的代码消除了上面的错误:
def my_array(arr: np.recarray[Any, Any]) -> None:
print(arr.x)
,但我更喜欢更具体的类型,如:
def my_array(arr: np.recarray[np.dtype[[('x', float), ('y', int)]]]) -> None:
print(arr.x)
但是我还没有想出如何正确地做到这一点。
from typing import Union
import numpy as np
def my_array(arr: np.recarray[Union[float, int], np.dtype[Union[np.float_, np.int_]]]) -> None:
print(arr.x)
my_array(np.rec.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')]))
通过了支票,但我不知道为什么。
from typing import Union
import numpy as np
def my_array(arr: np.recarray[Union[float, int], np.dtype[Union[np.float_, np.int_]]]) -> None:
print(arr.x)
my_array(np.rec.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')]))
。