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它效果很好!