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 이후로.

unsigned 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의 보수 정수로 해석하여 Python 정수를 생성합니다.

flagsPyLong_AsNativeBytes() 와 같습니다. -1 을 전달하면 CPython이 컴파일될 때의 네이티브 엔디안을 선택하고 최상위 비트가 부호 비트라고 가정합니다. 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이 컴파일될 때의 네이티브 엔디안을 선택하고 최상위 비트가 부호 비트가 아님을 가정합니다. endian을 제외한 기타 플래그는 무시됩니다.

Added in version 3.13.

PyLong_FromPid(pid)

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

이는 시스템의 PID 유형 크기에 따라 PyLong_FromLong() 또는 :c:func:`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에서 변경: 이 함수는 더 이상 :meth:`~object.__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에서 변경: 이 함수는 더 이상 :meth:`~object.__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에서 변경: 이 함수는 더 이상 :meth:`~object.__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에서 변경: 이 함수는 더 이상 :meth:`~object.__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에서 변경: 이 함수는 더 이상 :meth:`~object.__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에서 변경: 이 함수는 더 이상 :meth:`~object.__int__`를 사용하지 않습니다.

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

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

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

obj 값이 범위를 벗어나면, :exc:`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 이후로.

obj 의 부호 없는 C uint32_t 또는 uint64_t 표현으로 value 를 설정합니다.

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

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

  • obj 값이 범위를 벗어나면, :exc:`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 이후로.

Python 정수 값 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의 보수(two’s-complement)로 복사됩니다.

사용 예:

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 의 잘린
    // 하위 비트들이 담깁니다.
}

size-1 (기본값)인 경우, 임의의 수의 바이트가 반환됩니다 (EOF에 도달하지 않는 한 0보다 큽니다).

참고

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

알려지지 않은 크기의 전체 Python 값을 얻으려면, 함수를 두 번 호출할 수 있습니다: 먼저 버퍼 크기를 결정하고, 그런 다음 내용을 채웁니다.

// 필요한 공간의 크기를 물어봅니다.
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__() 메서드가 호출됩니다. 이로 인해 Python 코드가 실행되고 다른 쓰레드가 실행되는 것이 허용될 수 있으며, 사용 중인 다른 객체나 값에 변경이 발생할 수 있습니다. flags-1 인 경우, 이 옵션은 설정되지 않으며 정수 값이 아닌 값은 TypeError 를 발생시킵니다.

참고

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

Added in version 3.13.

PyLong_AsPid(pid)

Python 정수를 프로세스 식별자로 변환하는 매크로입니다.

시스템의 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`를 사용하고, 다른 값은 :c:func:`PyLong_As* 함수 또는 :c:func:`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 이후로.

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

PyLong_GetNativeLayout() 을 사용하여 Python int 객체의 네이티브 레이아웃을 가져옵니다. 이는 “충분히 큰” 절댓값을 가진 정수에 내부적으로 사용됩니다.

Python에서 유사한 정보를 노출하는 :data:`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 이후로.

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

PyLongLayout 구조를 참조하십시오.

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

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

Python 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 이후로.

파이썬 int 객체 내보내기(Export).

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

성공하면, *export_long 에 값을 채우고 0 을 반환합니다. 오류가 발생하면, 예외를 설정하고 -1 을 반환합니다.

내보내기(export)가 더 이상 필요하지 않을 때는 :c:func:`PyLong_FreeExport`를 호출해야 합니다.

이 함수는 obj 가 파이썬 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 이후로.

파이썬 int 작성기(writer) 인스턴스입니다.

인스턴스는 PyLongWriter_Finish() 또는 :c:func:`PyLongWriter_Discard`에 의해 파괴되어야 합니다.

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

:c:type:`PyLongWriter`를 생성합니다.

성공하면, *digits 를 할당하고 작성기를 반환합니다. 오류가 발생하면, 예외를 설정하고 NULL 을 반환합니다.

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

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

digits 는 NULL이 아니어야 합니다.

이 함수를 성공적으로 호출한 후에는, 호출자가 자릿수 배열 digits 를 채우고 PyLongWriter_Finish() 를 호출하여 파이썬 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 이후로.

:c:func:`PyLongWriter_Create`로 생성된 :c:type:`PyLongWriter`를 마무리합니다.

성공하면, 파이썬 int 객체를 반환합니다. 오류가 발생하면, 예외를 설정하고 NULL 을 반환합니다.

이 함수는 자릿수를 정규화하고 필요한 경우 객체를 압축 정수로 변환하는 작업을 수행합니다.

호출 후 작성기 인스턴스와 digits 배열은 유효하지 않습니다.

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

:c:func:`PyLongWriter_Create`로 생성된 :c:type:`PyLongWriter`를 폐기합니다.

writerNULL 이면, 작업이 수행되지 않습니다.

호출 후 작성기 인스턴스와 digits 배열은 유효하지 않습니다.

사용 지원 중단된 API입니다.

이 매크로는 soft deprecated`입니다. 이 매크로는 :c:type:`PyLongObject 인스턴스의 내부 표현 매개변수를 설명합니다.

대신 :c:func:`PyLong_GetNativeLayout`와 :c:func:`PyLong_Export`를 사용하여 정수 데이터를 읽거나, :c:type:`PyLongWriter`를 사용하여 작성합니다. 현재는 동일한 레이아웃을 사용하지만, CPython의 내부 정수 표현이 변경되더라도 계속 올바르게 작동하도록 설계되었습니다.

PyLong_SHIFT

이는 :c:func:`PyLong_GetNativeLayout`의 출력에 있는 :c:member:`~PyLongLayout.bits_per_digit`와 동일합니다.

PyLong_BASE

이는 현재 :c:expr:`1 << PyLong_SHIFT`와 동일합니다.

PyLong_MASK

이는 현재 :c:expr:`(1 << PyLong_SHIFT) - 1`와 동일합니다.

분실물 보관소