Python

정수 객체

모든 정수는 임의의 크기의 “long” 정수 객체로 구현됩니다.

에러 시, 대부분의 PyLong_As* API는 숫자와 구별할 수 없는 (return type)-1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

type PyLongObject
…의 일부 안정 ABI (불투명 구조체로).

PyObject의 서브 형은 파이썬 정수 객체를 나타냅니다.

PyTypeObject PyLong_Type
…의 일부 안정 ABI.

PyTypeObject 인스턴스는 파이썬 정수 형을 나타냅니다. 이것은 파이썬 계층의 int와 같은 객체입니다.

int PyLong_Check(PyObject *p)

인자가 PyLongObject이나 PyLongObject의 서브 형이면 참을 반환합니다. 이 함수는 항상 성공합니다.

int PyLong_CheckExact(PyObject *p)

인자가 PyLongObject 이지만 PyLongObject의 서브 형이 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.

PyObject *PyLong_FromLong(long v)
반환값: 새 참조. …의 일부 안정 ABI.

v로부터 새 PyLongObject 객체를 반환하거나, 실패하면 NULL을 반환합니다.

CPython은 -5``에서 ``1024 사이의 모든 정수에 대해 정수 객체 배열을 유지합니다. 해당 범위 내에서 int를 생성하면 실제로 기존 객체에 대한 참조를 반환하게 됩니다.

PyObject *PyLong_FromUnsignedLong(unsigned long v)
반환값: 새 참조. …의 일부 안정 ABI.

C unsigned long으로부터 새 PyLongObject 객체를 반환하거나, 실패하면 NULL을 반환합니다.

PyObject *PyLong_FromSsize_t(Py_ssize_t v)
반환값: 새 참조. …의 일부 안정 ABI.

C Py_ssize_t로부터 새 PyLongObject 객체를 반환하거나, 실패하면 NULL을 반환합니다.

PyObject *PyLong_FromSize_t(size_t v)
반환값: 새 참조. …의 일부 안정 ABI.

C size_t로부터 새 PyLongObject 객체를 반환하거나, 실패하면 NULL을 반환합니다.

PyObject *PyLong_FromLongLong(long long v)
반환값: 새 참조. …의 일부 안정 ABI.

C long long으로부터 새 PyLongObject 객체를 반환하거나, 실패하면 NULL을 반환합니다.

PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)
반환값: 새 참조. …의 일부 안정 ABI.

C unsigned long long으로부터 새 PyLongObject 객체를 반환하거나, 실패하면 NULL을 반환합니다.

PyObject *PyLong_FromInt32(int32_t value)
PyObject *PyLong_FromInt64(int64_t value)
…의 일부 안정 ABI 버전 3.14 이후로.

부호 있는 C int32_t 또는 int64_t 에서 새 PyLongObject 객체를 반환하거나, 실패 시 예외를 설정하고 NULL 을 반환합니다.

Added in version 3.14.

PyObject *PyLong_FromUInt32(uint32_t value)
PyObject *PyLong_FromUInt64(uint64_t value)
…의 일부 안정 ABI 버전 3.14 이후로.

부호 없는 C uint32_t 또는 uint64_t 에서 새 PyLongObject 객체를 반환하거나, 실패 시 예외를 설정하고 NULL 을 반환합니다.

Added in version 3.14.

PyObject *PyLong_FromDouble(double v)
반환값: 새 참조. …의 일부 안정 ABI.

v의 정수 부분으로부터 새 PyLongObject 객체를 반환하거나, 실패하면 NULL을 반환합니다.

PyObject *PyLong_FromString(const char *str, char **pend, int base)
반환값: 새 참조. …의 일부 안정 ABI.

str의 문자열 값을 기반으로 한 새 PyLongObject를 반환하거나, 실패하면 NULL을 반환합니다. 문자열 값은 base의 진수(기수)에 따라 해석됩니다. pendNULL이 아니면, *pend는 성공 시에 str의 끝을 가리키고, 에러 시에 처리할 수 없었던 첫 번째 문자를 가리킵니다. base0이면, str정수 리터럴 정의를 사용해서 해석됩니다; 이때, 0이 아닌 십진수의 선행 0은 ValueError를 발생시킵니다. base0이 아니면, 236 사이에 있어야 하며, 경계를 포함합니다. 선행과 후행 공백과 진수 지정자 뒤나 숫자 사이의 단일 밑줄은 무시됩니다. 숫자가 없거나 str이 숫자와 후행 공백 뒤에 NULL-종료하지 않으면, ValueError가 발생합니다.

더 보기

PyLong_AsNativeBytes()PyLong_FromNativeBytes() 함수는 PyLongObject 를 기반이 256 인 바이트 배열로 변환하거나 그 반대로 변환하는 데 사용될 수 있습니다.

PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)
반환값: 새 참조.

문자열 u에 있는 유니코드 숫자의 시퀀스를 파이썬 정숫값으로 변환합니다.

Added in version 3.3.

PyObject *PyLong_FromVoidPtr(void *p)
반환값: 새 참조. …의 일부 안정 ABI.

포인터 p로부터 파이썬 정수를 만듭니다. 포인터 값은 PyLong_AsVoidPtr()를 사용하여 결괏값에서 조회할 수 있습니다.

PyObject *PyLong_FromNativeBytes(const void *buffer, size_t n_bytes, int flags)
…의 일부 안정 ABI 버전 3.14 이후로.

buffer 의 처음 n_bytes 에 포함된 값을 2의 보수 부호 있는 숫자로 해석하여 파이썬 정수를 생성합니다.

flagsPyLong_AsNativeBytes() 와 동일합니다. -1 을 전달하면 CPython이 컴파일된 네이티브 엔디안을 선택하고 가장 중요한 비트(MSB)를 부호 비트로 간주합니다. Py_ASNATIVEBYTES_UNSIGNED_BUFFER 를 전달하면 PyLong_FromUnsignedNativeBytes() 를 호출한 것과 동일한 결과를 생성합니다. 다른 플래그는 무시됩니다.

Added in version 3.13.

PyObject *PyLong_FromUnsignedNativeBytes(const void *buffer, size_t n_bytes, int flags)
…의 일부 안정 ABI 버전 3.14 이후로.

buffer 의 처음 n_bytes 에 포함된 값을 부호 없는 숫자로 해석하여 파이썬 정수를 생성합니다.

flagsPyLong_AsNativeBytes() 와 동일합니다. -1 을 전달하면 CPython이 컴파일된 네이티브 엔디안을 선택하고 가장 중요한 비트(MSB)가 부호 비트가 아니라고 가정합니다. 엔디안 이외의 플래그는 무시됩니다.

Added in version 3.13.

PyLong_FromPid(pid)

프로세스 ID로부터 파이썬 정수를 생성하기 위한 매크로입니다.

이는 시스템의 PID 타입 크기에 따라 PyLong_FromLong() 또는 PyLong_FromLongLong() 의 별칭으로 정의될 수 있습니다.

Added in version 3.2.

long PyLong_AsLong(PyObject *obj)
…의 일부 안정 ABI.

obj의 C long 표현을 반환합니다. objPyLongObject의 인스턴스가 아니면, (있다면) 먼저 __index__() 메서드를 호출하여 PyLongObject로 변환합니다.

obj의 값이 long의 범위를 벗어나면 OverflowError를 발생시킵니다.

에러 시 -1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

버전 3.8에서 변경: 사용할 수 있으면 __index__()를 사용합니다.

버전 3.10에서 변경: 이 함수는 더 이상 __int__() 를 사용하지 않습니다.

long PyLong_AS_LONG(PyObject *obj)

권장되는 PyLong_AsLong 과 정확히 동일합니다. 특히, 이 함수는 OverflowError 또는 다른 예외와 함께 실패할 수 있습니다.

int PyLong_AsInt(PyObject *obj)
…의 일부 안정 ABI 버전 3.13 이후로.

PyLong_AsLong() 과 유사하지만, 결과를 C long 대신 C int 에 저장합니다.

Added in version 3.13.

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)
…의 일부 안정 ABI.

obj의 C long 표현을 반환합니다. objPyLongObject의 인스턴스가 아니면, (있다면) 먼저 __index__() 메서드를 호출하여 PyLongObject로 변환합니다.

obj의 값이 LONG_MAX보다 크거나 LONG_MIN보다 작으면, *overflow를 각각 1이나 -1로 설정하고 -1을 반환합니다; 그렇지 않으면, *overflow0으로 설정합니다. 다른 예외가 발생하면 *overflow0으로 설정하고 -1을 평소와 같이 반환합니다.

에러 시 -1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

버전 3.8에서 변경: 사용할 수 있으면 __index__()를 사용합니다.

버전 3.10에서 변경: 이 함수는 더 이상 __int__() 를 사용하지 않습니다.

long long PyLong_AsLongLong(PyObject *obj)
…의 일부 안정 ABI.

obj의 C long long 표현을 반환합니다. objPyLongObject의 인스턴스가 아니면, (있다면) 먼저 __index__() 메서드를 호출하여 PyLongObject로 변환합니다.

obj의 값이 long long의 범위를 벗어나면 OverflowError를 발생시킵니다.

에러 시 -1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

버전 3.8에서 변경: 사용할 수 있으면 __index__()를 사용합니다.

버전 3.10에서 변경: 이 함수는 더 이상 __int__() 를 사용하지 않습니다.

long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)
…의 일부 안정 ABI.

obj의 C long long 표현을 반환합니다. objPyLongObject의 인스턴스가 아니면, (있다면) 먼저 __index__() 메서드를 호출하여 PyLongObject로 변환합니다.

obj의 값이 LLONG_MAX보다 크거나 LLONG_MIN보다 작으면, *overflow를 각각 1이나 -1로 설정하고 -1을 반환합니다; 그렇지 않으면, *overflow0으로 설정합니다. 다른 예외가 발생하면 *overflow0으로 설정하고 -1을 평소와 같이 반환합니다.

에러 시 -1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

Added in version 3.2.

버전 3.8에서 변경: 사용할 수 있으면 __index__()를 사용합니다.

버전 3.10에서 변경: 이 함수는 더 이상 __int__() 를 사용하지 않습니다.

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)
…의 일부 안정 ABI.

pylong의 C Py_ssize_t 표현을 반환합니다. pylongPyLongObject의 인스턴스여야 합니다.

pylong의 값이 Py_ssize_t의 범위를 벗어나면 OverflowError를 발생시킵니다.

에러 시 -1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)
…의 일부 안정 ABI.

pylong의 C unsigned long 표현을 반환합니다. pylongPyLongObject의 인스턴스여야 합니다.

pylong의 값이 unsigned long의 범위를 벗어나면 OverflowError를 발생시킵니다.

에러 시 (unsigned long)-1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

size_t PyLong_AsSize_t(PyObject *pylong)
…의 일부 안정 ABI.

pylong의 C size_t 표현을 반환합니다. pylongPyLongObject의 인스턴스여야 합니다.

pylong의 값이 size_t의 범위를 벗어나면 OverflowError를 발생시킵니다.

에러 시 (size_t)-1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)
…의 일부 안정 ABI.

pylong의 C unsigned long long 표현을 반환합니다. pylongPyLongObject의 인스턴스여야 합니다.

pylong의 값이 unsigned long long의 범위를 벗어나면 OverflowError를 발생시킵니다.

에러 시 (unsigned long long)-1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

버전 3.1에서 변경: 음의 pylong는 이제 TypeError가 아니라 OverflowError를 발생시킵니다.

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)
…의 일부 안정 ABI.

obj의 C unsigned long 표현을 반환합니다. objPyLongObject의 인스턴스가 아니면, (있다면) 먼저 __index__() 메서드를 호출하여 PyLongObject로 변환합니다.

obj의 값이 unsigned long의 범위를 벗어나면, 그 값의 모듈로 ULONG_MAX + 1 환원을 반환합니다.

에러 시 (unsigned long)-1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

버전 3.8에서 변경: 사용할 수 있으면 __index__()를 사용합니다.

버전 3.10에서 변경: 이 함수는 더 이상 __int__() 를 사용하지 않습니다.

unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)
…의 일부 안정 ABI.

obj의 C unsigned long long 표현을 반환합니다. objPyLongObject의 인스턴스가 아니면, (있다면) 먼저 __index__() 메서드를 호출하여 PyLongObject로 변환합니다.

obj의 값이 unsigned long long의 범위를 벗어나면, 그 값의 모듈로 ULLONG_MAX + 1 환원을 반환합니다.

에러 시 (unsigned long long)-1을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

버전 3.8에서 변경: 사용할 수 있으면 __index__()를 사용합니다.

버전 3.10에서 변경: 이 함수는 더 이상 __int__() 를 사용하지 않습니다.

int PyLong_AsInt32(PyObject *obj, int32_t *value)
int PyLong_AsInt64(PyObject *obj, int64_t *value)
…의 일부 안정 ABI 버전 3.14 이후로.

valueobj 의 부호 있는 C int32_t 또는 int64_t 표현으로 설정합니다.

objPyLongObject 의 인스턴스가 아니면, 먼저 (있는 경우) __index__() 메서드를 호출하여 이를 PyLongObject 로 변환합니다.

obj 값이 범위를 벗어나면 OverflowError 를 발생시킵니다.

성공 시 *value 를 설정하고 0 을 반환합니다. 오류 발생 시 예외를 설정하고 -1 을 반환합니다.

valueNULL 이 아니어야 합니다.

Added in version 3.14.

int PyLong_AsUInt32(PyObject *obj, uint32_t *value)
int PyLong_AsUInt64(PyObject *obj, uint64_t *value)
…의 일부 안정 ABI 버전 3.14 이후로.

*valueobj 의 부호 없는 C uint32_t 또는 uint64_t 표현으로 설정합니다.

objPyLongObject 의 인스턴스가 아니면, 먼저 (있는 경우) __index__() 메서드를 호출하여 이를 PyLongObject 로 변환합니다.

  • obj 이 음수이면 ValueError 를 발생시킵니다.

  • obj 값이 범위를 벗어나면 OverflowError 를 발생시킵니다.

성공 시 *value 를 설정하고 0 을 반환합니다. 오류 발생 시 예외를 설정하고 -1 을 반환합니다.

valueNULL 이 아니어야 합니다.

Added in version 3.14.

double PyLong_AsDouble(PyObject *pylong)
…의 일부 안정 ABI.

pylong의 C double 표현을 반환합니다. pylongPyLongObject의 인스턴스여야 합니다.

pylong의 값이 double의 범위를 벗어나면 OverflowError를 발생시킵니다.

에러 시 -1.0을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

void *PyLong_AsVoidPtr(PyObject *pylong)
…의 일부 안정 ABI.

파이썬 정수 pylong을 C void 포인터로 변환합니다. pylong을 변환할 수 없으면, OverflowError가 발생합니다. 이것은 PyLong_FromVoidPtr()로 만들어진 값에 대해서만 사용할 수 있는 void 포인터를 생성하는 것이 보장됩니다.

에러 시 NULL을 반환합니다. 모호성을 제거하려면 PyErr_Occurred()를 사용하십시오.

Py_ssize_t PyLong_AsNativeBytes(PyObject *pylong, void *buffer, Py_ssize_t n_bytes, int flags)
…의 일부 안정 ABI 버전 3.14 이후로.

파이썬 정수 값 pylong 을 크기가 n_bytes 인 네이티브 buffer 로 복사합니다. flags 는 C 캐스트와 유사하게 동작하도록 -1 로 설정하거나, 아래에 설명된 값을 사용하여 동작을 제어할 수 있습니다.

오류 시 예외를 발생시키고 -1``을 반환합니다. 이는 *pylong*을 정수로 해석할 없거나, *pylong*이 음수인데 ``Py_ASNATIVEBYTES_REJECT_NEGATIVE 플래그가 설정된 경우에 발생할 수 있습니다.

그렇지 않으면 값을 저장하는 데 필요한 바이트 수를 반환합니다. 이 값이 n_bytes 와 같거나 작으면 전체 값이 복사된 것입니다. 버퍼의 모든 n_bytes 가 기록되며, 남은 바이트는 부호 비트 복사로 채워집니다.

반환된 값이 n_bytes 보다 크면 값이 잘린 것입니다. 들어갈 수 있는 만큼의 최하위 비트만 기록되고 상위 비트는 무시됩니다. 이는 전형적인 C 스타일 다운캐스트 동작과 일치합니다.

참고

오버플로는 오류로 간주되지 않습니다. 반환된 값이 n_bytes 보다 크면 최상위 비트들이 버려집니다.

0 은 절대 반환되지 않습니다.

값은 항상 2의 보수 방식으로 복사됩니다.

사용 예제:

int32_t value;
Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, &value, sizeof(value), -1);
if (bytes < 0) {
    // 실패. 이유와 함께 파이썬 예외가 설정됩니다.
    return NULL;
}
else if (bytes <= (Py_ssize_t)sizeof(value)) {
    // 성공!
}
else {
    // 오버플로우가 발생했지만, 'value' 에 pylong 의 잘린
    // 하위 비트들이 담깁니다.
}

n_bytes 에 0을 전달하면 값을 담기에 충분히 큰 버퍼의 크기를 반환합니다. 이는 기술적으로 필요한 것보다 클 수 있지만 합리적인 범위 내에 있습니다. 만약 n_bytes=0 이면 bufferNULL 일 수 있습니다.

참고

이 함수에 n_bytes=0 을 전달하는 것은 값의 비트 길이를 정확하게 파악하는 방법이 아닙니다.

알 수 없는 크기의 전체 파이썬 값을 가져오려면 이 함수를 두 번 호출할 수 있습니다. 먼저 버퍼 크기를 결정하고, 그다음 내용을 채웁니다:

// 필요한 공간의 크기를 물어봅니다.
Py_ssize_t expected = PyLong_AsNativeBytes(pylong, NULL, 0, -1);
if (expected < 0) {
    // 실패. 이유와 함께 파이썬 예외가 설정됩니다.
    return NULL;
}
assert(expected != 0);  // API 정의에 따라 불가능합니다.
uint8_t *bignum = malloc(expected);
if (!bignum) {
    PyErr_SetString(PyExc_MemoryError, "bignum malloc failed.");
    return NULL;
}
// 안전하게 전체 값을 얻습니다.
Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, bignum, expected, -1);
if (bytes < 0) {  // 예외가 설정되었습니다.
    free(bignum);
    return NULL;
}
else if (bytes > expected) {  // 이는 불가능해야 합니다.
    PyErr_SetString(PyExc_RuntimeError,
        "Unexpected bignum truncation after a size check.");
    free(bignum);
    return NULL;
}
// 위의 사전 점검을 고려할 때 예상되는 성공.
// ... bignum 을 사용합니다 ...
free(bignum);

flags 는 C 캐스트와 가장 유사하게 동작하는 기본값을 선택하는 -1 (Py_ASNATIVEBYTES_DEFAULTS)이거나, 아래 표에 있는 다른 플래그들의 조합입니다. 참고로 -1 은 다른 플래그와 결합할 수 없습니다.

현재 -1Py_ASNATIVEBYTES_NATIVE_ENDIAN | Py_ASNATIVEBYTES_UNSIGNED_BUFFER 에 해당합니다.

플래그

Py_ASNATIVEBYTES_DEFAULTS
…의 일부 안정 ABI 버전 3.14 이후로.

-1

Py_ASNATIVEBYTES_BIG_ENDIAN
…의 일부 안정 ABI 버전 3.14 이후로.

0

Py_ASNATIVEBYTES_LITTLE_ENDIAN
…의 일부 안정 ABI 버전 3.14 이후로.

1

Py_ASNATIVEBYTES_NATIVE_ENDIAN
…의 일부 안정 ABI 버전 3.14 이후로.

3

Py_ASNATIVEBYTES_UNSIGNED_BUFFER
…의 일부 안정 ABI 버전 3.14 이후로.

4

Py_ASNATIVEBYTES_REJECT_NEGATIVE
…의 일부 안정 ABI 버전 3.14 이후로.

8

Py_ASNATIVEBYTES_ALLOW_INDEX
…의 일부 안정 ABI 버전 3.14 이후로.

16

Py_ASNATIVEBYTES_NATIVE_ENDIAN 을 지정하면 다른 모든 엔디안 플래그보다 우선합니다. 2 는 예약된 값입니다.

기본적으로 부호 비트를 포함할 수 있는 충분한 버퍼가 요청됩니다. 예를 들어, n_bytes=1 로 128을 변환할 때 이 함수는 0인 부호 비트를 저장하기 위해 2(또는 그 이상)를 반환합니다.

Py_ASNATIVEBYTES_UNSIGNED_BUFFER 가 지정되면 크기 계산에서 0인 부호 비트가 생략됩니다. 이를 통해 예를 들어 128이 단일 바이트 버퍼에 들어갈 수 있습니다. 만약 대상 버퍼를 나중에 부호 있는 타입으로 처리할 경우, 양수 입력값이 음수가 될 수도 있습니다. 이 플래그는 음수 값의 처리에 영향을 주지 않으며, 음수의 경우 항상 부호 비트를 위한 공간이 요청됩니다.

Py_ASNATIVEBYTES_REJECT_NEGATIVE``를 지정하면 *pylong*이 음수일 예외가 발생합니다. 플래그가 없으면, ``Py_ASNATIVEBYTES_UNSIGNED_BUFFER 지정 여부와 관계없이 최소 하나의 부호 비트를 위한 충분한 공간이 있다면 음수 값도 복사됩니다.

Py_ASNATIVEBYTES_ALLOW_INDEX 가 지정되고 정수가 아닌 값이 전달되면, 먼저 해당 값의 __index__() 메서드가 호출됩니다. 이로 인해 파이썬 코드가 실행되고 다른 스레드가 실행될 수 있으며, 이는 현재 사용 중인 다른 객체나 값에 변화를 줄 수 있습니다. flags-1 인 경우 이 옵션은 설정되지 않으며, 정수가 아닌 값을 입력하면 TypeError 가 발생합니다.

참고

기본 flags (-1 또는 REJECT_NEGATIVE 없이 UNSIGNED_BUFFER 만 설정된 경우)를 사용하면, 여러 파이썬 정수가 오버플로우 없이 하나의 값으로 매핑될 수 있습니다. 예를 들어, 255-1 모두 단일 바이트 버퍼에 적합하며 모든 비트를 설정합니다. 이는 전형적인 C 캐스트 동작과 일치합니다.

Added in version 3.13.

PyLong_AsPid(pid)

파이썬 정수를 프로세스 ID로 변환하는 매크로입니다.

시스템의 PID 유형 크기에 따라 PyLong_AsLong(), PyLong_FromLongLong(), 또는 PyLong_AsInt() 중 하나로 정의될 수 있습니다.

Added in version 3.2.

int PyLong_GetSign(PyObject *obj, int *sign)

정수 객체 obj 의 부호를 가져옵니다.

성공 시 *sign 에 정수 부호(각각 0, -1 또는 +1)를 설정하고 0 을 반환합니다.

실패 시 예외를 설정하고 -1을 반환합니다. objPyLongObject 또는 그 하위 타입인 경우 이 함수는 항상 성공합니다.

Added in version 3.14.

int PyLong_IsPositive(PyObject *obj)

정수 객체 obj 가 양수인지(obj > 0) 확인합니다.

objPyLongObject 또는 그 하위 타입의 인스턴스이면 양수일 때 1 을, 그렇지 않을 때 0 을 반환합니다. 그렇지 않으면 예외를 설정하고 -1 을 반환합니다.

Added in version 3.14.

int PyLong_IsNegative(PyObject *obj)

정수 객체 obj 이 음수인지(obj < 0) 확인합니다.

objPyLongObject 또는 그 하위 타입의 인스턴스이면 음수일 때 1 을, 그렇지 않을 때 0 을 반환합니다. 그렇지 않으면 예외를 설정하고 -1 을 반환합니다.

Added in version 3.14.

int PyLong_IsZero(PyObject *obj)

정수 객체 obj 이 0인지 확인합니다.

objPyLongObject 또는 그 하위 타입의 인스턴스이면 0일 때 1 을, 그렇지 않을 때 0 을 반환합니다. 그렇지 않으면 예외를 설정하고 -1 을 반환합니다.

Added in version 3.14.

PyObject *PyLong_GetInfo(void)
…의 일부 안정 ABI.

On success, return a read only named tuple, that holds information about Python’s internal representation of integers. See sys.int_info for description of individual fields.

실패 시 예외를 설정하고 NULL 을 반환합니다.

Added in version 3.1.

int PyUnstable_Long_IsCompact(const PyLongObject *op)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

op 이 컴팩트하면 1을, 그렇지 않으면 0을 반환합니다.

이 함수는 성능에 민감한 코드에서 작은 정수를 위한 “빠른 경로”를 구현할 수 있게 합니다. 컴팩트한 값은 PyUnstable_Long_CompactValue() 를 사용하고, 다른 경우에는 PyLong_As* 함수나 PyLong_AsNativeBytes() 로 대체합니다.

속도 향상은 대부분의 사용자에게는 미미할 것으로 예상됩니다.

어떤 값이 컴팩트로 간주되는지는 구현 세부 사항이며 변경될 수 있습니다.

Added in version 3.12.

Py_ssize_t PyUnstable_Long_CompactValue(const PyLongObject *op)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

PyUnstable_Long_IsCompact() 에 의해 결정된 op 가 컴팩트한 경우, 해당 값을 반환합니다.

그렇지 않은 경우 반환 값은 정의되지 않습니다.

Added in version 3.12.

익스포트 API

Added in version 3.14.

type PyLongLayout
…의 일부 안정 ABI (모든 멤버 포함) 버전 3.15 이후로.

임의 정밀도 정수의 절댓값을 표현하는 데 사용되는 “digit”(GMP 용어로는 “limb”) 배열의 레이아웃입니다.

충분히 큰 절댓값을 가진 정수의 내부 처리에 사용되는 파이썬 int 객체의 네이티브 레이아웃을 가져오려면 PyLong_GetNativeLayout() 을 사용하십시오.

파이썬에서 유사한 정보를 제공하는 sys.int_info 를 참고하십시오.

uint8_t bits_per_digit

자릿수당 비트 수입니다. 예를 들어, 15비트 자릿수는 0~14번 비트에 유의미한 정보가 포함되어 있음을 의미합니다.

uint8_t digit_size

바이트 단위의 자릿수 크기입니다. 예를 들어, 15비트 자릿수는 최소 2바이트가 필요합니다.

int8_t digits_order

자릿수 순서:

  • 1 은 최상위 자릿수 우선

  • -1 은 최하위 자릿수 우선

int8_t digit_endianness

자릿수 엔디안:

  • 1 은 최상위 바이트 우선(빅 엔디안)

  • -1 은 최하위 바이트 우선(리틀 엔디안)

const PyLongLayout *PyLong_GetNativeLayout(void)
…의 일부 안정 ABI 버전 3.15 이후로.

파이썬 int 객체의 네이티브 레이아웃을 가져옵니다.

PyLongLayout 구조를 참조하십시오.

이 함수는 파이썬 초기화 전에 호출되거나 파이썬 종료 후에 호출되어서는 안 됩니다. 반환된 레이아웃은 파이썬이 종료될 때까지 유효합니다. 해당 레이아웃은 프로세스 내의 모든 파이썬 서브 인터프리터에서 동일하므로 캐시할 수 있습니다.

type PyLongExport
…의 일부 안정 ABI (모든 멤버 포함) 버전 3.15 이후로.

파이썬 int 객체의 익스포트입니다.

두 가지 경우가 있습니다:

int64_t value

익스포트된 int 객체의 네이티브 정수 값입니다. digitsNULL 인 경우에만 유효합니다.

uint8_t negative

숫자가 음수이면 1, 그렇지 않으면 0 을 반환합니다. digitsNULL 이 아닌 경우에만 유효합니다.

Py_ssize_t ndigits

digits 배열의 자릿수입니다. digitsNULL 이 아닌 경우에만 유효합니다.

const void *digits

읽기 전용 부호 없는 자릿수 배열입니다. NULL 일 수 있습니다.

int PyLong_Export(PyObject *obj, PyLongExport *export_long)
…의 일부 안정 ABI 버전 3.15 이후로.

Python int 객체를 익스포트합니다.

export_long 은 호출자가 할당한 PyLongExport 구조체를 가리켜야 합니다. NULL 이어서는 안 됩니다.

성공 시, *export_long 을 채우고 0 을 반환합니다. 오류 시, 예외를 설정하고 -1 을 반환합니다.

익스포트가 더 이상 필요하지 않을 때 PyLong_FreeExport() 를 호출해야 합니다.

obj 이 Python int 객체이거나 그 하위 클래스인 경우 이 함수는 항상 성공합니다.

void PyLong_FreeExport(PyLongExport *export_long)
…의 일부 안정 ABI 버전 3.15 이후로.

PyLong_Export() 에 의해 생성된 익스포트 export_long 을 해제합니다.

export_long->digitsNULL 인 경우 PyLong_FreeExport() 호출은 선택 사항입니다.

PyLongWriter API

PyLongWriter API를 사용하여 정수를 임포트할 수 있습니다.

Added in version 3.14.

type PyLongWriter
…의 일부 안정 ABI (불투명 구조체로) 버전 3.15 이후로.

Python int 라이터 인스턴스입니다.

인스턴스는 PyLongWriter_Finish() 또는 PyLongWriter_Discard() 를 통해 파괴되어야 합니다.

PyLongWriter *PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits)
…의 일부 안정 ABI 버전 3.15 이후로.

PyLongWriter 를 생성합니다.

성공 시, *digits 를 할당하고 라이터를 반환합니다. 오류 시, 예외를 설정하고 NULL 을 반환합니다.

negative 는 숫자가 음수이면 1 이고, 그렇지 않으면 0 입니다.

ndigits*은 *digits 배열의 자릿수입니다. 이 값은 0보다 커야 합니다.

digits 는 NULL이어서는 안 됩니다.

이 함수를 성공적으로 호출한 후, 호출자는 자릿수 배열인 digits 를 채우고 PyLongWriter_Finish() 를 호출하여 Python int 객체를 가져와야 합니다. digits 의 레이아웃은 PyLong_GetNativeLayout() 에 설명되어 있습니다.

자릿수는 [0; (1 << bits_per_digit) - 1] 범위 내에 있어야 합니다(여기서 bits_per_digit 은 자릿수당 비트 수를 의미합니다). 사용하지 않는 상위 자릿수는 모두 0 으로 설정해야 합니다.

대신, PyLongWriter_Discard() 를 호출하여 int 객체를 생성하지 않고 라이터 인스턴스를 파괴할 수 있습니다.

PyObject *PyLongWriter_Finish(PyLongWriter *writer)
반환값: 새 참조. …의 일부 안정 ABI 버전 3.15 이후로.

PyLongWriter_Create() 에 의해 생성된 PyLongWriter 를 완료합니다.

성공 시, Python int 객체를 반환합니다. 오류 시, 예외를 설정하고 NULL 을 반환합니다.

이 함수는 자릿수를 정규화하며 필요한 경우 객체를 컴팩트한 정수로 변환합니다.

호출 후에는 라이터 인스턴스와 digits 배열이 무효화됩니다.

void PyLongWriter_Discard(PyLongWriter *writer)
…의 일부 안정 ABI 버전 3.15 이후로.

PyLongWriter_Create() 에 의해 생성된 PyLongWriter 를 폐기합니다.

writerNULL 인 경우 아무런 작업도 수행되지 않습니다.

호출 후에는 라이터 인스턴스와 digits 배열이 무효화됩니다.

더 이상 사용되지 않는 API (Deprecated)

These macros are soft deprecated. They describe parameters of the internal representation of PyLongObject instances.

대신 PyLong_GetNativeLayout() 을 사용하십시오. 정수 데이터를 읽으려면 PyLong_Export() 를, 쓰기 위해서는 PyLongWriter 를 함께 사용하면 됩니다. 이들은 현재 동일한 레이아웃을 사용하지만, CPython의 내부 정수 표현이 변경되더라도 올바르게 작동하도록 설계되었습니다.

PyLong_SHIFT

이것은 PyLong_GetNativeLayout() 출력에서 bits_per_digit 과 동일합니다.

PyLong_BASE

이것은 현재 1 << PyLong_SHIFT 와 동일합니다.

PyLong_MASK

이것은 현재 (1 << PyLong_SHIFT) - 1 과 동일합니다.

분실물 보관소