2017-08-13 87 views
1

传递指针到C函数在Python我想有作为最佳方式使用CFFI

int f(double* x); 

这样的签名的第三方库创建一个Python包装C函数其中函数f修改输入参数x(即,使用指针通过引用调用)。什么是实现Python包装函数的最有效方法,以便Python用户可以将它视为一种每次只返回一个新数字的函数?实施例的伪代码:

# lib and ffi are imported from a compiled cffi.FFI() object 
def python_f(): 
    ??? double x; ??? 
    rc = lib.f(&x) 
    assert rc == 0 
    return x 

我应该使用阵列模块(例如,创建尺寸1的“双重”阵列,传递给该函数,并返回第一个索引)?有更轻量级的方法使用ctypes或cffi帮助函数吗?

回答

1
def python_f(): 
    x_ptr = ffi.new("double[1]") 
    x_ptr[0] = old_value 
    rc = lib.f(x_ptr) 
    assert rc == 0 
    return x_ptr[0]