2017-08-13 45 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]