如何将列表,整数,字符串作为函数的参数从python传递给C

时间:2012-09-21 05:38:07

标签: python c

我有一个如下所述的python代码,它调用一个“C”函数trans实现为python扩展。如何在C代码中提取整数,字符串,列出所有不同类型的参数? 下面的代码不能将列表作为参数提取。下面的代码只是一个示例代码,它将给出我所拥有的问题的概念。它不是完整的代码。

Test.py

def tpp:  
    value =0455455  
    name ='go'  
    parameter =[0,0,0]  
    parameter[0] ='hello'
    parameter[1] ='helloworld'        
    trans(value =value, name =name ,parameter =parameter)  

trans.c

  static Pyobject mod_trans(Pyobject *self, Pyobject *args ,Pyobject *keyargs)  
   {    
     char name ;  
     int value ;  
     char* parameter;  
     static char *kwlist[] ={"value", "name", "parameter")  
     if(!PyArg_ParseTupleAndKeywords(args,keyargs, "si|items",kwlist,&name,&value,
         &parameter)  
      return NULL;


    }

1 个答案:

答案 0 :(得分:0)

你传入一个列表并期待一个字符串输出(char *);这不行。列表只能转换为PyObject *。因此,您应该使用

PyObject *parameter;
...
if(!PyArg_ParseTupleAndKeywords(args, kwargs, "is|O", kwlist, &name, &value, &parameter))

如果要强制该对象是列表,请使用

PyObject *parameter;
...
if(!PyArg_ParseTupleAndKeywords(args, kwargs, "is|O!", kwlist, &name, &value, &PyList_Type, &parameter))