Python:C++ 扩展返回多个值

Posted

技术标签:

【中文标题】Python:C++ 扩展返回多个值【英文标题】:Python: C++ extension returning multiple values 【发布时间】:2016-09-09 21:09:17 【问题描述】:

我正在为 python 脚本编写一个 C++ 扩展,并希望返回多个值,就像我们在 python 函数中可以做的那样。

python中的简单示例:

def test():
    return 0,0

tuple 似乎是最接近的答案

#include <tuple>

std::tuple<int,int> test(void)
return std::make_tuple(0,0);

但是当我编译它时,它会抱怨

TypeError: No to_python (by-value) converter found for C++ type: std::tuple<int, int>

有人知道我是否可以使用 C++ 返回多个值吗?

编辑:

这是我的 setup.py 文件。

#!/usr/bin/env python

from distutils.core import setup
from distutils.extension import Extension

setup(name="PackageName",
    ext_modules=[
        Extension("foo", ["foo.cpp"],
        libraries = ["boost_python"],
        extra_compile_args = ["-std=c++11"]
        )
    ])

【问题讨论】:

如果要返回特定的数据类型,例如 int 或 float,可以使用该特定类型的 array 或 std::vector。 Python C 扩展很烂……试试 ctypes……它更好,兼容广泛,不依赖于 python 版本,但需要更多的 C/C++ 经验。 你是如何构建 python C++ 扩展的?我不知道该错误的来源。 【参考方案1】:

看来您正在使用 boost-python。然后应该使用 boost::python::tuple,而不是 std::tuple。请参阅this page 上的示例。

【讨论】:

以上是关于Python:C++ 扩展返回多个值的主要内容,如果未能解决你的问题,请参考以下文章

python lambda 返回值放多个条件的扩展思考(面试题)

使用pybind11开发python扩展库

将 C++ 数组发送到 Python 并返回(使用 Numpy 扩展 C++)

python系列教程195——返回多个值

python系列教程195——返回多个值

Python C++ 扩展单例