これは この質問 のフォローアップです。
(なぜ/いつ)索引付けに_Py_ssize_t
_を使用することは望ましいですか? docs で見つけた
_# Purists could use "Py_ssize_t" which is the proper Python type for # array indices.
_
-> NumPy/Cython-配列/ビューにインデックスを付けるときは常に_Py_ssize_t
_を使用する必要があるという意味ですか?
->は_Py_ssize_t
_です。 g。 _unsigned int
_使用できないように@cython.boundscheck(False)
Py_ssize_t
が署名されています。 PEP 35 の説明を参照 "コンパイラのsize_t型と同じサイズであるが、署名されている新しい型Py_ssize_tが導入されました。利用可能なssize_tのtypedef。 "
索引付けにはPy_ssize_t
を使用する必要があります。 Cythonのドキュメントでこれについての明確な説明は見つかりませんでしたが、Cython開発者のStefan Behnelがメールで同じように述べています( https://groups.google.com/forum/#!topic/ cython-users/brENF_M9zxM ):
一般的な注意として、インデックスとしてintを使用しています。 64ビットアーキテクチャに適切に対応するには、代わりにPy_ssize_t型(または、符号なしの型が必要な場合はsize_t)を使用する必要があります。
Py_ssize_t
は、CPythonの実装で内部的に使用されるtypedefです(CのPython-私はnotここでCythonについて話している)、私はPython C API関数は、インデックスの作成に使用できるCレベルの整数を受け入れるか、または返しますPythonシーケンスです。それが理由です。インデックスに使用する「正しい」タイプ。
Py_ssize_t
は、プラットフォームのスペルがsignedプラットフォームCの符号なしのsize_t
タイプのバリアントに解決されます。したがって、これは符号付き整数型ですが、その幅(ビット数)は、使用しているプラットフォームによって異なります。