Python

튜플 객체

type PyTupleObject

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

PyTypeObject PyTuple_Type
상의 안정 ABI.

PyTypeObject 인스턴스는 파이썬 튜플 형을 나타냅니다. 파이썬 계층의 tuple과 같은 객체입니다.

int PyTuple_Check(PyObject *p)

p가 튜플 객체이거나 튜플 형의 서브 형의 인스턴스면 참을 돌려줍니다. 이 함수는 항상 성공합니다.

int PyTuple_CheckExact(PyObject *p)

p가 튜플 객체이지만, 튜플 형의 서브 형의 인스턴스는 아니면 참을 돌려줍니다. 이 함수는 항상 성공합니다.

PyObject *PyTuple_New(Py_ssize_t len)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

크기 len 인 튜플 객체나, 실패 시 예외를 설정하고 NULL을 반환합니다.

PyObject *PyTuple_FromArray(PyObject *const *array, Py_ssize_t size)
Thread safety: Atomic.

size 항목의 튜플을 생성하고 array 에서 새 튜플로 참조를 복사합니다.

배열크기0 이면 NULL일 수 있습니다.

성공 시 새 참조를 반환합니다. 오류 시 예외를 설정하고 NULL 을 반환합니다.

Added in version 3.15.

PyObject *PyTuple_Pack(Py_ssize_t n, ...)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

크기 n 인 새 튜플 객체나, 실패 시 예외를 설정하고 NULL을 반환합니다. 튜플 값은 파이썬 객체를 가리키는 후속 n 개의 C 인자로 초기화됩니다. PyTuple_Pack(2, a, b)Py_BuildValue("(OO)", a, b)와 동등합니다.

Py_ssize_t PyTuple_Size(PyObject *p)
상의 안정 ABI. Thread safety: Atomic.

튜플 객체에 대한 포인터를 받아서, 해당 튜플의 크기를 반환합니다. 오류가 발생하면, 예외를 설정하고 -1 을 반환합니다.

Py_ssize_t PyTuple_GET_SIZE(PyObject *p)
Thread safety: Atomic.

PyTuple_Size()와 비슷하지만, 에러 검사를 생략합니다.

PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
반환값: 빌린 참조. 상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

p가 가리키는 튜플의 pos 위치에 있는 객체를 반환합니다. pos가 음수이거나 범위를 벗어나면, NULL을 반환하고 IndexError 예외를 설정합니다.

반환된 참조는 튜플 p 로부터 빌려온 것입니다(즉, p 에 대한 참조를 보유하는 동안만 유효합니다). 강한 참조 를 얻으려면 Py_NewRef(PyTuple_GetItem(...)) 또는 PySequence_GetItem() 을 사용하십시오.

PyObject *PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
반환값: 빌린 참조. Thread safety: Safe to call from multiple threads with external synchronization only.

PyTuple_GetItem()와 비슷하지만, 인자를 확인하지 않습니다.

PyObject *PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

p가 가리키는 튜플의 lowhigh 사이의 슬라이스를 반환하거나, 실패하면 예외를 설정하고 NULL을 반환합니다.

이것은 파이썬 표현식 p[low:high]와 동등합니다. 튜플 끝으로부터의 인덱싱은 지원되지 않습니다.

int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

p 가 가리키는 튜플의 pos 위치에 객체 o 에 대한 참조를 삽입합니다. 성공하면 0 을 반환합니다. pos 가 범위를 벗어나면, -1 을 반환하고 IndexError 예외를 설정합니다. 이 함수는 오직 새 튜플을 채우는 용도로만 사용해야 합니다. 기존 튜플에 사용하면 스레드 안전하지 않습니다.

참고

이 함수는 o에 대한 참조를 “훔치고” 영향을 받는 위치에서 튜플에 이미 있는 항목에 대한 참조를 버립니다(discard).

void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)
Thread safety: Safe to call from multiple threads with external synchronization only.

:c:func:`PyTuple_SetItem`과 유사하지만 오류 검사는 하지 않으며, 오직 새 튜플을 채우는 용도로만 사용해야 합니다. 기존 튜플에 사용하면 스레드 안전하지 않습니다.

Bounds checking is performed as an assertion if Python is built in debug mode or with assertions.

참고

이 함수는 o에 대한 참조를 “훔치고”, PyTuple_SetItem()와 달리, 교체 중인 항목에 대한 참조를 버리지 않습니다; pos 위치에서 튜플의 모든 참조는 누수됩니다.

경고

이 매크로는 새롭게 생성된 튜플에만 사용 해야 합니다. 이미 사용 중인 튜플(즉, 참조 개수(refcount)가 1보다 큰 튜플)에 이 매크로를 사용하면 정의되지 않은 동작이 발생할 수 있습니다.

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)
Thread safety: Safe to call from multiple threads with external synchronization only.

튜플 크기를 조정하는 데 사용할 수 있습니다. newsize는 튜플의 새로운 길이가 됩니다. 튜플은 불변이라고 여겨지므로, 객체에 대해 참조가 하나만 있을 때만 사용해야 합니다. 튜플이 코드의 다른 부분에 이미 알려졌으면 이것을 사용하지 마십시오. 튜플은 항상 끝에서 커지거나 줄어듭니다. 이것을 오래된 튜플을 파괴하고 새 튜플을 만드는 것으로 생각하십시오, 단지 더 효율적일 뿐입니다. 성공하면 0을 반환합니다. 클라이언트 코드는, *p의 결괏값이 이 함수를 호출하기 전과 같다고 가정해서는 안 됩니다. *p가 참조하는 객체가 바뀌면 원래 *p는 파괴됩니다. 실패하면, -1을 반환하고, *pNULL로 설정하고, MemoryErrorSystemError를 발생시킵니다.

구조체 시퀀스 객체

구조체 시퀀스 객체는 :term:`named tuple`이며, 즉 속성을 통해서도 항목에 접근할 수 있는 시퀀스입니다. 이는 :func:`collections.namedtuple`과 유사하지만, 약간 다른 인터페이스를 제공합니다.

구조체 시퀀스를 생성하려면, 먼저 특정 구조체 시퀀스 타입을 생성해야 합니다.

PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

아래에 설명된 desc의 데이터로 새로운 구조체 시퀀스 형을 만듭니다. 결과 형의 인스턴스는 PyStructSequence_New()로 만들 수 있습니다.

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

void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
Thread safety: Safe to call without external synchronization on distinct objects.

desc로 구조체 시퀀스 형 type을 재자리에서 초기화합니다.

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)
Thread safety: Safe to call without external synchronization on distinct objects.

PyStructSequence_InitType()와 비슷하지만, 성공하면 0을, 실패하면 예외를 설정하고 -1을 반환합니다.

Added in version 3.4.

type PyStructSequence_Desc
상의 안정 ABI (모든 멤버 포함).

만들 구조체 시퀀스 형의 메타 정보를 포함합니다.

const char *name

타입의 완전한 자격 이름입니다. null 종단 문자열 UTF-8 인코딩 형태입니다. 이 이름은 모듈 이름을 포함해야 합니다.

const char *doc

해당 형에 대한 독스트링에 대한 포인터나 생략하려면 NULL.

PyStructSequence_Field *fields

새로운 형의 필드 이름을 가진 NULL로 끝나는 배열에 대한 포인터.

int n_in_sequence

파이썬 측에서 볼 수 있는 필드 수 (튜플로 사용된 경우).

type PyStructSequence_Field
상의 안정 ABI (모든 멤버 포함).

구조체 시퀀스의 필드를 기술합니다. 구조체 시퀀스는 튜플로 모형화되므로, 모든 필드는 PyObject* 형을 취합니다. PyStructSequence_Descfields 배열의 인덱스는 구조체 시퀀스의 어떤 필드가 기술되는지를 결정합니다.

const char *name

필드의 이름. 또는 이름있는 필드의 목록을 끝내려면 NULL, 이름이 없는 상태로 두려면 PyStructSequence_UnnamedField로 설정합니다.

const char *doc

필드 독스트링이나 생략하려면 NULL.

const char *const PyStructSequence_UnnamedField
상의 안정 ABI 버전 3.11 이후로.

이름 없는 상태로 남겨두기 위한 필드 이름의 특수 값.

버전 3.9에서 변경: 형이 char *에서 변경되었습니다.

PyObject *PyStructSequence_New(PyTypeObject *type)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

PyStructSequence_NewType()으로 만든 type의 인스턴스를 만듭니다.

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

PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
반환값: 빌린 참조. 상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

p \가 가리키는 구조체 시퀀스의 위치 pos \에 있는 객체를 반환합니다. 반환된 참조는 구조체 시퀀스 p 에서 차용됩니다 (즉, p 에 대한 참조를 보유하는 동안에만 유효합니다).

Bounds checking is performed as an assertion if Python is built in debug mode or with assertions.

PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
반환값: 빌린 참조. Thread safety: Safe to call from multiple threads with external synchronization only.

PyStructSequence_GetItem()의 별칭.

버전 3.13에서 변경: 이제 PyStructSequence_GetItem()의 별칭으로 구현됩니다.

void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

구조체 시퀀스 p의 인덱스 pos에 있는 필드를 값 o로 설정합니다. PyTuple_SET_ITEM()과 마찬가지로, 이것은 새로운 인스턴스를 채울 때만 사용해야 합니다.

Bounds checking is performed as an assertion if Python is built in debug mode or with assertions.

참고

이 함수는 o에 대한 참조를 “훔칩니다”.

void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)
Thread safety: Safe to call from multiple threads with external synchronization only.

PyStructSequence_SetItem()의 별칭.

버전 3.13에서 변경: 이제 PyStructSequence_SetItem()의 별칭으로 구현됩니다.

분실물 보관소