मैं एक सी फ़ंक्शन लिख रहा हूं जो ints
के एक पायथन tuple
को तर्क के रूप में लेता है।पायथन ट्यूपल टू सी सर
static PyObject* lcs(PyObject* self, PyObject *args) {
int *data;
if (!PyArg_ParseTuple(args, "(iii)", &data)) {
....
}
}
मैं एक निश्चित लंबाई (यहाँ 3) लेकिन कैसे किसी भी लम्बाई की एक tuple
से एक सी array
प्राप्त करने के लिए की एक टपल बदलने में सक्षम हूँ?
import lcs
lcs.lcs((1,2,3,4,5,6)) #<- C should receive it as {1,2,3,4,5,6}
संपादित
एक टपल मैं द्वारा अलग संख्या के साथ एक स्ट्रिंग पारित कर सकते हैं करने के बजाय';'। जैसे '1; 2; 3; 4; 5; 6' और उन्हें सी कोड में सरणी में अलग करें। लेकिन मुझे नहीं लगता कि यह करने का एक उचित तरीका है।
static PyObject* lcs(PyObject* self, PyObject *args) {
char *data;
if (!PyArg_ParseTuple(args, "s", &data)) {
....
}
int *idata;
//get ints from data(string) and place them in idata(array of ints)
}
संपादित करें (समाधान)
मुझे लगता है कि मैं एक समाधान मिल गया है: अगर यह आप जो खोज रहे हैं है, लेकिन
static PyObject* lcs(PyObject* self, PyObject *args) {
PyObject *py_tuple;
int len;
int *c_array;
if (!PyArg_ParseTuple(args, "O", &py_tuple)) {
return NULL;
}
len = PyTuple_Size(py_tuple);
c_array= malloc(len*4);
while (len--) {
c_array[len] = (int) PyInt_AsLong(PyTuple_GetItem(py_tuple, len));
//c_array is our array of ints :)
}
va_list? वह केवल एक तर्क है। –
तर्क, एक टपल है ताकि आप कार्यों कि tuples हेरफेर ... https://docs.python.org/2/c-api/tuple.html PyTuple_GetItem और PyTuple_Size तरह यहाँ एक उदाहरण है उपयोग कर सकते हैं इससे मदद मिलनी चाहिए: http://stackoverflow.com/questions/8001923/python-extension-module-with-variable-number-of-arguments – danielfranca
धन्यवाद, PyTuple_Size और PyTuple_GetItem बहुत उपयोगी थे :) –