2014-08-28 11 views
5

मैं एक सी फ़ंक्शन लिख रहा हूं जो 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 :) 
    } 

उत्तर

2

उपयोग PyArg_VaParse: https://docs.python.org/2/c-api/arg.html#PyArg_VaParse यह va_list, जहाँ आप तर्क के परिवर्तनशील प्राप्त कर सकते हैं के साथ काम करता है।

अधिक यहाँ जानकारी: http://www.cplusplus.com/reference/cstdarg/va_list/

और यह एक टपल आप टपल कार्यों का उपयोग कर सकते हैं के रूप में: PyTuple_Size और PyTuple_GetItem

तरह https://docs.python.org/2/c-api/tuple.html

यहाँ है कि यह कैसे उपयोग करने के लिए की एक उदाहरण है: Python extension module with variable number of arguments

Let मुझे पता है कि यह आपकी मदद करता है।

मैनुअल से
+0

va_list? वह केवल एक तर्क है। –

+0

तर्क, एक टपल है ताकि आप कार्यों कि 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

+0

धन्यवाद, PyTuple_Size और PyTuple_GetItem बहुत उपयोगी थे :) –

0

सुनिश्चित नहीं हैं कि आप लिख सकते हैं एक सी फ़ंक्शन जो va_list और va_start का उपयोग करके तर्कों की एक चर संख्या लेता है। एक ट्यूटोरियल यहाँ है: http://www.cprogramming.com/tutorial/c/lesson17.html

+0

: "सी फ़ंक्शन में हमेशा दो तर्क होते हैं, जिन्हें पारंपरिक रूप से स्वयं और तर्क दिया जाता है।" –

संबंधित मुद्दे