복붙노트

[PYTHON] Cython : (왜 / 언제) 인덱싱에 Py_ssize_t를 사용하는 것이 더 좋습니까?

PYTHON

Cython : (왜 / 언제) 인덱싱에 Py_ssize_t를 사용하는 것이 더 좋습니까?

이것은이 질문에 대한 후속 조치입니다.

(왜 / 언제) 인덱싱에 Py_ssize_t를 사용하는 것이 바람직합니까? 방금 찾은 문서에서

-> NumPy / Cython 배열 (들)에 인덱싱 할 때 항상 Py_ssize_t를 사용해야한다는 것을 의미합니까?

-> Py_ssize_t가 있습니까? 지. @cython.boundscheck (False)를 사용할 수 없도록 부호없는 정수

해결법

  1. ==============================

    1.Py_ssize_t가 서명되었습니다. "새로운 타입 Py_ssize_t가 도입되었습니다. 컴파일러의 size_t 타입과 크기는 같지만 서명되어 있습니다. 가능한 경우 ssize_t의 typedef가 될 것입니다."라는 PEP 353을보십시오.

    Py_ssize_t가 서명되었습니다. "새로운 타입 Py_ssize_t가 도입되었습니다. 컴파일러의 size_t 타입과 크기는 같지만 서명되어 있습니다. 가능한 경우 ssize_t의 typedef가 될 것입니다."라는 PEP 353을보십시오.

    인덱싱에는 Py_ssize_t를 사용해야합니다. Cython 문서에서 이에 대한 결정적인 진술을 찾지 못했지만 Cython 개발자 인 Stefan Behnel은 이메일 (https://groups.google.com/forum/#!topic/cython-users/)에서 많은 것을 말했습니다. brENF_M9zxM) :

  2. ==============================

    2.Py_ssize_t는 CPython 구현에서 내부적으로 사용되는 typedef입니다 (Python의 C 구현 - Cython에 대해서는 언급하지 않고 CPython에 대해 설명합니다). 파이썬 C API 함수는 파이썬 시퀀스의 색인을 생성하는 데 사용할 수있는 C 레벨 정수를 허용하거나 반환합니다. 그것이 인덱스에 사용할 "올바른"유형의 이유입니다.

    Py_ssize_t는 CPython 구현에서 내부적으로 사용되는 typedef입니다 (Python의 C 구현 - Cython에 대해서는 언급하지 않고 CPython에 대해 설명합니다). 파이썬 C API 함수는 파이썬 시퀀스의 색인을 생성하는 데 사용할 수있는 C 레벨 정수를 허용하거나 반환합니다. 그것이 인덱스에 사용할 "올바른"유형의 이유입니다.

    Py_ssize_t는 차례로 플랫폼 C의 부호없는 size_t 유형의 서명 된 변형에 대한 플랫폼 철자가 무엇이든 해결합니다. 따라서 부호있는 정수형이지만 너비 (비트 수)는 사용하는 플랫폼에 따라 다릅니다.

  3. from https://stackoverflow.com/questions/20987390/cython-why-when-is-it-preferable-to-use-py-ssize-t-for-indexing by cc-by-sa and MIT license