20

是否有人为特定的numpy.ndarray类实现了类型提示?numpy.ndarray的类型提示/注释(PEP 484)

现在,我正在使用typing.Any,但它会更好地具有更具体的东西。

例如,如果numpy人为他们的array_like对象类添加type alias。更好的是,在dtype级别实现支持,以便支持其他对象以及ufunc

+0

我不记得在SO'numpy'问题或答案中看到任何对Python3类型注释的使用。 – hpaulj

+1

https://pypi.python.org/pypi/plac可以使用Py3批注 - 填充'argparse'分析器。对于Py2,它使用装饰器来创建一个类似的'annocation'数据库。 – hpaulj

+1

“打字”是Py 3.5的新功能。许多'numpy'用户仍然使用Py2。我的系统上有3.5,但我没有安装'numpy'。 'numpy'开发人员不会为Python的最前沿添加功能(除了'@'运算符) – hpaulj

回答

7

看起来typing模块在研发:

https://github.com/python/typing

主要numpy库是在

https://github.com/numpy/numpy

Python的错误,并承诺可以在

http://bugs.python.org/被跟踪

添加功能的常用方法是分叉主存储库,开发功能,直到它是防爆炸的,然后提交拉请求。很明显,在这个过程中的各个方面你都需要其他开发者的反馈。如果你自己无法做到这一点,那么你必须说服其他人这是一个有价值的项目。

cython有一种注释形式,它用来生成高效的C代码。


您在numpy文档中引用的array-like段落。注意其typing信息:

一个简单的方法,以找出是否该对象可以使用数组转换为numpy的阵列()仅仅是交互式尝试一下,看看它是否工作! (Python方式)。

换句话说,numpy开发者拒绝被固定下来。他们不能也不能用文字描述什么样的物体可以或不可以被转换成np.ndarray

In [586]: np.array({'test':1}) # a dictionary 
Out[586]: array({'test': 1}, dtype=object) 

In [587]: np.array(['one','two']) # a list 
Out[587]: 
array(['one', 'two'], 
     dtype='<U3') 

In [589]: np.array({'one','two'}) # a set 
Out[589]: array({'one', 'two'}, dtype=object) 

为了你自己的功能,如

def foo(x: np.ndarray) -> np.ndarray: 

作品的注释。当然,如果你的函数最终调用了一些numpy函数,它通过asanyarray来传递它的参数(如同许多函数一样),这样的注解将是不完整的,因为你的输入可能是listnp.matrix等。

+0

提交https://github.com/numpy/numpy/issues/7370 – Inon

+1

您使用的是什么软件,编辑器或解释器,它使用'annotations'?据我所知,在普通的Python 3中,一个函数会得到一个'__annotations__'字典,但是解释器不会做任何事情。 – hpaulj

+1

你是否想在现有的'numpy'函数(包括'np.array')中添加'输入'注释,或者只是将类型添加到自己的函数中? – hpaulj

3

结账DataShape。它使用数据类型以及一些输入和输出数组应该有多大的语法。

+0

因此DataShape是一个Numpy _alternative_?不是我想到的,因为我正在使用SciPy,它需要Numpy。 – Inon

+0

DataShape是一个描述。目前没有官方功能注释,但到目前为止,这是我见过的Numpy类型的最佳描述,如果您打算构建函数注释。是的,我建议创建一个新的模块名称,并在将函数注释引入numpy源代码之前将其用作概念验证。 – Back2Basics

2

我做什么,只是把它定义为

快译通[元组[INT,INT] TYPE]

因此,举例来说,如果你想花车你可以做的数组:

a = numpy.empty(shape=[2, 2], dtype=float) # type: Dict[Tuple[int, int], float]

这当然是不准确的,从一个文档的观点,但分析正确使用和得到适当的补偿与pyCharm letion它效果很好!