Hi.
Das ist eigentlich ganz einfach.
Jedes Objekt in Python ist in C vom Typ "PyObject *". Du kannst jeden Typen erstellen, z.B. mit PyString_New();.
So kannst du das auch einfach mit Listen machen:
PyObject *pList = PyList_New();
PyList_AddItem(PyString_New("test")); // keine Ahnung ob die Funktion wirklich so heißt, PyList_GetItem gibt es jedenfalls
Ich möchte aus der Python liste, ein double array erstellen.
Da man in Python alle Objekte in einer Liste speichern kann, kann es sein, dass irgendein Datentyp in der Liste steht.
Um jetzt falsche ergebnisse auszuschließen, würde ich gerne überprüfen ob in der Liste auch eine Zahl drin steht.
Alles schön und gut, aber meine Frage bleibt immer noch bei dem warum!? Man könnte auch einfach in C davon ausgehen, dass das was man da hat ein "iterable" ist, durch die ganzen Elemente gehen und sich ein `double()` davon geben lassen. Falls das nicht geht, eben entsprechend den Fehler als Ausnahme weitermelden. Wie man das in Python halt auch machen würde.
Oder man verwendet `ctypes` zur Kommunikation mit dem C-Teil.
>>> all([])
True
>>> all([1])
True
>>> from functools import partial
>>> all = partial(reduce, lambda a, b: a and b)
>>> all([])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: reduce() of empty sequence with no initial value
>>> all([1])
1