Ich versuche PySequence_Length
zu verwenden, um die Länge eines Python-Wörterbuchs in C zu bekommen. Ich weiß, dass ich PyDict_Size
verwenden kann, aber ich bin daran interessiert, eine allgemeinere Funktion zu verwenden in bestimmten Kontexten.Python C-API: `PySequence_Length` mit Wörterbüchern verwenden
PyObject* d = PyDict_New();
Py_ssize_t res = PySequence_Length(d);
printf("Result : %ld\n", res);
if (res == -1) PyErr_Print();
Dies schlägt fehl, und druckt den Fehler:
TypeError: object of type 'dict' has no len()
Meine Frage ist: Warum funktioniert das nicht? Obwohl Python-Dictionary-Objekte Sequenzprotokoll nicht unterstützen, die documentation für PySequence_Length
sagt:
Py_ssize_t PySequence_Length(PyObject *o)
Returns the number of objects in sequence o on success, and -1 on failure. For objects that do not provide sequence protocol, this is equivalent to the Python expression len(o).
Da ein Wörterbuchtyp ein __len__
Attribut hat, und da der Ausdruck len(d)
(wo d
ein Wörterbuch ist) richtig kehrt die Länge in Python, ich verstehe nicht, warum PySequence_Length
in C ausfallen sollte.
Eine Erklärung? Ist die Dokumentation hier falsch?