如何使用Python4Delphi从Delphi返回列表到Python

时间:2018-01-17 23:24:13

标签: delphi python4delphi

使用Python4Delphi,将Delphi方法暴露给Python非常简单,以便Python可以调用Delphi应用程序。但是我无法将由Delphi方法创建的Python列表返回给Python。例如:

function TDelphiAPI.callMethod : PPyObject;
begin
  // Create a new empty list of three elements
  result := GetPythonEngine.PyList_New(3);
end;

import mylib
p = mylib.DelphiAPI()
print p.callmethod()

从Python调用时返回'NoneType'。如果将PPyObject更改为诸如整数,AnsiString或double之类的类型,则Python会选择正确的类型并正确显示它。我用

  GetPythonEngine.AddMethod ('callMethod', @TDelphiAPI.callMethod, 'callMmethod)');

从Delphi公开方法。但是,据我所知,没有办法为参数或返回类型指定类型。

我想知道是否有人从delphi python类型返回,例如列表甚至是numpy数组?

1 个答案:

答案 0 :(得分:0)

普通 Python 数组(对于标准 CPython)通常称为“列表”。 Python 中的 numpy.array 类型(或可变列表)是一种特殊类型,它比普通 Py 浮点对象的普通 Python 列表具有更高的内存和布局效率。 如果您想使用 Delphi 并访问 Numpy.array 或列表,我想最直接的方法是实现一种导出一些访问 Numpy.array 类型的简单 C 函数的方法。

Numpy.array 包装了一个标准内存块,可作为本机 C 数组类型访问。反过来,这不会像 Delphi 方法创建的那样干净地映射到 Python 的 Delphi 数组类型。