gpt4 book ai didi

c++ - 使用 c++ boost::python 从 python 函数返回的列表中获取数据?

转载 作者:行者123 更新时间:2023-12-03 07:22:53 38 4
gpt4 key购买 nike

我有一个返回浮点数列表的python函数:

# Script.py
def get_double_list():
data_list = []
for a in range(5):
data_list.append(float(a/10));
return data_list
我想从 C++ 代码中调用它并从列表中获取数据。
我编写了以下 C++ 代码,但提取 double 不起作用。
我究竟做错了什么?
#define BOOST_AUTO_LINK_NOMANGLE
#include <boost/python.hpp>
#include <iostream>

namespace bp = boost::python;

int main(int argc, char** argv)
{

Py_Initialize();
boost::python::object main_module = boost::python::import("__main__");
boost::python::dict main_namespace = boost::python::extract<boost::python::dict>(main_module.attr("__dict__"));

exec_file("Script.py", main_namespace, main_namespace);

boost::python::object global(main_module.attr("__dict__"));
boost::python::object get_double_list = global["get_double_list"];

if (!get_double_list.is_none())
{
auto py_ex_list = bp::extract<bp::list>(get_double_list());
if (py_ex_list.check())
{
bp::list py_list = py_ex_list();
Py_ssize_t list_len = bp::len(py_list);
std::cout << "List length is: " << list_len << std::endl;
for (Py_ssize_t i = 0; i < list_len; i++)
{
auto item = py_list[i];
auto d_ex = bp::extract<double>(item);
double d = d_ex();
std::cout << "Double = " << d << std::endl;
}
}
}
return 0;
}
我知道它以某种方式失败了
auto d_ex = bp::extract<double>(item);
(在 MS Windows 10、Boost 1.73.0、Python 3.8.5 上测试)

最佳答案

如果我将 data_list 更改为 global 它可以工作

data_list = []

def get_double_list():
global data_list
for a in range(5):
data_list.append(float(a/10));
return data_list

关于c++ - 使用 c++ boost::python 从 python 函数返回的列表中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64579871/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com