ffi 包

与 Python 语言的互操作

介绍

为了兼容强大的计算和 AI 生态,仓颉支持与 Python 语言的互操作调用。Python 的互操作通过 std 模块中的 ffi.python 库为用户提供能力。

本包暂不支持 macOS 平台。

功能介绍

Python 的全局资源及使用

Python 库为用户提供了全局解释器对象 Python ,其类型为 PythonBuiltins ,通过该解释器对象可以:

  • 加载、卸载解释器资源;
  • 获取当前使用的 Python 解释器版本;
  • 导入及使用 Python 的三方模块。

详细介绍及使用请参见用户手册中【与 Python 语言互操作/PythonBuiltins 内建函数类】章节。

类型映射

Python 库提供了 Python 数据类型与仓颉类型之间的互相转换。如 PyBool/PyLong/PyFloat/PyString/PyTuple/PyList/PyDict/PySet, 它们均继承自 PyObject 类型,PyObject 类型提供了所有类型的通用接口,如成员变量访问、函数访问、到仓颉类型转换等。PyObject 类型的子类提供了每个类型独有的函数接口。

详细映射关系介绍及使用请参见用户手册中【与 Python 语言互操作/类型映射表】章节。

仓颉与 Python 的注册回调

Python 互操作库支持简单的函数注册及 Python 对仓颉函数调用。

Python 回调仓颉代码需要通过 C 作为中间层进行调用,并且使用到了 Python 的三方库: ctypes 以及 _ctypes

用户手册【与 Python 语言互操作/仓颉与 Python 的注册回调】章节详细介绍了在回调过程中,两边参数和返回值的类型映射情况以及调用方式。