Tuple-Objekte

type PyTupleObject

Diese Unterklasse von PyObject repräsentiert ein Python-Tuple-Objekt.

PyTypeObject PyTuple_Type
Teil der Stable ABI.

Diese Instanz von PyTypeObject repräsentiert den Python-Tuple-Typ; sie ist dasselbe Objekt wie tuple in der Python-Schicht.

int PyTuple_Check(PyObject *p)

Gibt wahr zurück, wenn p ein Tuple-Objekt oder eine Instanz einer Unterklasse des Tuple-Typs ist. Diese Funktion ist immer erfolgreich.

int PyTuple_CheckExact(PyObject *p)

Gibt wahr zurück, wenn p ein Tuple-Objekt, aber keine Instanz einer Unterklasse des Tuple-Typs ist. Diese Funktion ist immer erfolgreich.

PyObject *PyTuple_New(Py_ssize_t len)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt ein neues Tuple-Objekt der Größe len zurück oder NULL mit einer gesetzten Exception im Fehlerfall.

PyObject *PyTuple_Pack(Py_ssize_t n, ...)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt ein neues Tuple-Objekt der Größe n zurück oder NULL mit einer gesetzten Exception im Fehlerfall. Die Tupelwerte werden mit den nachfolgenden n C-Argumenten initialisiert, die auf Python-Objekte zeigen. PyTuple_Pack(2, a, b) ist äquivalent zu Py_BuildValue("(OO)", a, b).

Py_ssize_t PyTuple_Size(PyObject *p)
Teil der Stable ABI.

Nimmt einen Zeiger auf ein Tuple-Objekt und gibt die Größe dieses Tupels zurück. Im Fehlerfall wird -1 zurückgegeben und eine Exception gesetzt.

Py_ssize_t PyTuple_GET_SIZE(PyObject *p)

Wie PyTuple_Size(), aber ohne Fehlerprüfung.

PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
Rückgabewert: Ausgeliehene Referenz. Teil der Stable ABI.

Gibt das Objekt an der Position pos im durch p dargestellten Tupel zurück. Wenn pos negativ oder außerhalb der Grenzen liegt, wird NULL zurückgegeben und eine IndexError-Exception gesetzt.

Die zurückgegebene Referenz ist vom Tupel p entlehnt (d.h.: sie ist nur gültig, solange Sie eine Referenz auf p halten). Um eine starke Referenz zu erhalten, verwenden Sie Py_NewRef(PyTuple_GetItem(...)) oder PySequence_GetItem().

PyObject *PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
Rückgabewert: Entliehene Referenz.

Wie PyTuple_GetItem(), aber ohne Prüfung seiner Argumente.

PyObject *PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt den Slice des durch p dargestellten Tupels zwischen low und high zurück, oder NULL mit einer gesetzten Exception im Fehlerfall.

Dies ist das Äquivalent zum Python-Ausdruck p[low:high]. Indizierung vom Ende des Tupels wird nicht unterstützt.

int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
Teil der Stable ABI.

Fügt eine Referenz auf das Objekt o an der Position pos des durch p dargestellten Tupels ein. Gibt bei Erfolg 0 zurück. Wenn pos außerhalb der Grenzen liegt, wird -1 zurückgegeben und eine IndexError-Exception gesetzt.

Hinweis

Diese Funktion "stiehlt" eine Referenz auf o und verwirft eine Referenz auf ein bereits im Tupel an der betroffenen Position befindliches Element.

void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)

Wie PyTuple_SetItem(), aber ohne Fehlerprüfung und sollte *nur* zum Füllen brandneuer Tupel verwendet werden.

Grenzenprüfung wird als Assertion durchgeführt, wenn Python im Debug-Modus oder mit Assertionen kompiliert wurde.

Hinweis

Diese Funktion "stiehlt" eine Referenz auf o und verwirft, im Gegensatz zu PyTuple_SetItem(), keine Referenz auf ein ersetztes Element; jede Referenz im Tupel an Position pos wird geleakt.

Warnung

Dieses Makro sollte *nur* auf neu erstellten Tupeln verwendet werden. Die Verwendung dieses Makros auf einem bereits verwendeten Tupel (oder anders ausgedrückt: mit einer Referenzanzahl > 1) kann zu undefiniertem Verhalten führen.

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)

Kann verwendet werden, um ein Tupel zu vergrößern/verkleinern. newsize wird die neue Länge des Tupels sein. Da Tupel *unveränderlich* sein sollen, sollte dies nur verwendet werden, wenn es nur eine Referenz auf das Objekt gibt. Verwenden Sie dies *nicht*, wenn das Tupel möglicherweise bereits anderen Teilen des Codes bekannt ist. Das Tupel wird immer am Ende wachsen oder schrumpfen. Betrachten Sie dies als Zerstörung des alten Tupels und Erstellung eines neuen, nur effizienter. Gibt 0 bei Erfolg zurück. Client-Code sollte niemals davon ausgehen, dass der resultierende Wert von *p derselbe ist wie vor dem Aufruf dieser Funktion. Wenn das von *p referenzierte Objekt ersetzt wird, wird das ursprüngliche *p zerstört. Im Fehlerfall gibt die Funktion -1 zurück, setzt *p auf NULL und löst eine MemoryError oder eine SystemError aus.

Struct-Sequenz-Objekte

Struct-Sequenz-Objekte sind das C-Äquivalent von namedtuple()-Objekten, d.h. einer Sequenz, deren Elemente auch über Attribute zugänglich sind. Um eine Struct-Sequenz zu erstellen, müssen Sie zuerst einen spezifischen Struct-Sequenz-Typ erstellen.

PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Erstellt einen neuen Struct-Sequenz-Typ aus den Daten in desc, wie unten beschrieben. Instanzen des resultierenden Typs können mit PyStructSequence_New() erstellt werden.

Gibt NULL mit einer gesetzten Exception im Fehlerfall zurück.

void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)

Initialisiert einen Struct-Sequenz-Typ type im Speicher aus desc.

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)

Wie PyStructSequence_InitType(), gibt aber 0 bei Erfolg und -1 mit einer gesetzten Exception im Fehlerfall zurück.

Hinzugefügt in Version 3.4.

type PyStructSequence_Desc
Teil der Stable ABI (einschließlich aller Member).

Enthält die Metainformationen für den zu erstellenden Struct-Sequenz-Typ.

const char *name

Vollqualifizierter Name des Typs; null-terminiert und UTF-8-kodiert. Der Name muss den Modulnamen enthalten.

const char *doc

Zeiger auf den Docstring für den Typ oder NULL zum Auslassen.

PyStructSequence_Field *fields

Zeiger auf ein null-terminiertes Array von Feldnamen des neuen Typs.

int n_in_sequence

Anzahl der Felder, die von der Python-Seite sichtbar sind (wenn als Tupel verwendet).

type PyStructSequence_Field
Teil der Stable ABI (einschließlich aller Member).

Beschreibt ein Feld einer Struct-Sequenz. Da eine Struct-Sequenz als Tupel modelliert wird, sind alle Felder als PyObject* typisiert. Der Index im fields-Array der PyStructSequence_Desc bestimmt, welches Feld der Struct-Sequenz beschrieben wird.

const char *name

Name für das Feld oder NULL zum Beenden der Liste benannter Felder, auf PyStructSequence_UnnamedField gesetzt, um es unbenannt zu lassen.

const char *doc

Feld-Docstring oder NULL zum Auslassen.

const char *const PyStructSequence_UnnamedField
Teil des Stable ABI seit Version 3.11.

Spezialwert für einen Feldnamen, um ihn unbenannt zu lassen.

Geändert in Version 3.9: Der Typ wurde von char * geändert.

PyObject *PyStructSequence_New(PyTypeObject *type)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Erstellt eine Instanz von type, die mit PyStructSequence_NewType() erstellt worden sein muss.

Gibt NULL mit einer gesetzten Exception im Fehlerfall zurück.

PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
Rückgabewert: Ausgeliehene Referenz. Teil der Stable ABI.

Gibt das Objekt an Position pos in der Struct-Sequenz, die durch p dargestellt wird, zurück.

Grenzenprüfung wird als Assertion durchgeführt, wenn Python im Debug-Modus oder mit Assertionen kompiliert wurde.

PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
Rückgabewert: Entliehene Referenz.

Alias für PyStructSequence_GetItem().

Geändert in Version 3.13: Implementiert nun als Alias für PyStructSequence_GetItem().

void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
Teil der Stable ABI.

Setzt das Feld am Index pos der Struct-Sequenz p auf den Wert o. Wie PyTuple_SET_ITEM() sollte dies nur zum Füllen brandneuer Instanzen verwendet werden.

Grenzenprüfung wird als Assertion durchgeführt, wenn Python im Debug-Modus oder mit Assertionen kompiliert wurde.

Hinweis

Diese Funktion "stiehlt" eine Referenz auf o.

void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)

Alias für PyStructSequence_SetItem().

Geändert in Version 3.13: Implementiert nun als Alias für PyStructSequence_SetItem().