Swig,返回一系列双打

use*_*370 9 c python arrays swig return

我知道,通常有很多方法可以解决某些问题.但是在这里我知道我希望它采用哪种方式,但我无法使用Python和SWIG ...

我有一个C函数,它返回一个double值数组:

double *my(int x)
{
   double a,b,*buf;
   buf = malloc (x * sizeof(double));
   a=3.14;
   b=2.7;
   buf[0]=a;
   buf[1]=b;
   return buf;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我明确希望将数组作为返回值.不像在许多示例中那样写入输入数组的'void'函数.现在,我想获得一个SWIG-python包装器,它可以用作:

>>> import example
>>> print example.my(7)
[3.14,2.7]
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我都有一些概念上的问题 - 我总是得到s.th. 喜欢<Swig Object of type 'double *' at 0xFABCABA12>

我试图在swg文件中定义一些类型图:

%typemap(out) double [ANY] {
  int i;
  $result = PyList_New($1_dim0);
  for (i = 0; i < $1_dim0; i++) {
    PyObject *o = PyFloat_FromDouble((double) $1[i]);
    PyList_SetItem($result,i,o);
  }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然无法按要求取出我的结果.有没有人有一个简单的代码示例来实现这个任务?

Tar*_*ast -4

我不知道你懂多少 C - 所以很抱歉如果我在这里教你吸鸡蛋......

普通 C 语言中没有 Array 类。数组始终是指向一块内存的指针,而不是其本身的“事物”,因此不能仅自行打印出来。

在这种情况下 - 你的“buf”是“double *”类型。AFAICRem,如果你想打印出存储在“buf指向的内存”中的实际值,你必须释放每个值,例如(伪代码): for i = 0 to buflength print buf[i]