函数的signature:
boost::pythoin::api::object exec(boost::python::str string,
boost::python::api::object global=boost::python::api::object(),
boost::python::api::object local=boost::python::api::object())
示例:
//C++
boost::python::object main_module = import("__main__");
boost::python::object main_namespace = main_module.attr("__dict__");
boost::python::object return_value = exec("result = 2**10", main_namespace,main_namespace);
函数作用:用来执行一个字符串形式语句,或者表达式,并返回得到的计算结果。
参数:
返回的值是Boost::Python::api中的Object对象。
可以使用extract来获得C++类型的值。
函数的signature:
namespace bpa = boost::python::api;
bpa::object bpa::eval(boost::python::str string,
bpa::object global=bpa::object(), bpa::object local = bpa::object())
示例:
//C++
boost::python::object main_module = import("__main__");
boost::python::object main_namespace = main_module.attr("__dict__");
boost::python::object return_value = eval("2**10", main_namespace,main_namespace);
函数作用:用来执行一个python求值的表达式的字符串, 并返回得到的计算结果。
参数:
返回的值是Boost::Python::api中的Object对象。
eval与exec的调用形式相同,作用也基本相同,区别是
eval :evaluate Python expression from str
用来直接运行一个表达式求得一个值,而不是运行一个语句,eval需要有返回的值。
exec:execute python expression from str
用来运行一个表达式或者运行一个语句,可以有返回值,也可以没有。
如
using namespace boost::python::api;
object result = eval("result=2*10",main_namespace,main_namespace);
//Error: 无法执行,因为需要得到一个返回结果,而非运行一个语句
object result1 = eval("2*10",main_namespace, main_namespace);
//correct.
object result2 = eval("result=2*10",main_namespace,main_namespace);
//correct:无论语句还是表达式,都可以执行。
object result3 = eval("2*10",main_namespace, main_namespace);
//correct.
函数的signature:
namespace bpa=boost::python::api;
bpa::object exec_file(boost::python::str filename,
bpa::object global=bpa::object(), bpa::object local=pba::object())
示例:
//C++
boost::python::object main_module = import("__main__");
boost::python::object main_namespace = main_module.attr("__dict__");
boost::python::object simple = exec_file("D:\\demoPython\\example.py", main_namespace,main_namespace);
函数作用:Execute python source code from file ‘filename’.
参数:
主要用来将文件加载到namespace中,用来后期调用其中的一些函数。
函数的signature:
boost::python::extract (boost::python::api::object const& o)
boost::python:;extract<T>(PyObject* o)
boost::python::extract (const boost::python::extract& o)
示例:
// C++
using namespace boost::python;
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
object add_func = mainNamespace["add"];
// extract(object const& o)
double add_result = extract(add_func(12));
// Pythonscript: def add(a): return a+100
// boost::python:;extract(PyObject* o)
object obj_result = extract