你如何在 boost::p ython 中"from __future__ import division"?
How do you "from __future__ import division" in boost::python?
我在Python 2.7中使用boost::p ython。我想启用 Python 3.0 风格的划分来调用 boost::p ython::eval,就像你从 Python 程序中使用
from __future__ import division
这看起来应该有效,尽管它将拉入所有未来,而不仅仅是除法:
boost::python::object mainModule = boost::python::import( "__main__" );
boost::python::object mainNamespace = mainModule.attr( "__dict__" );
mainNamespace[ "__future__" ] = boost::python::import( "__future__" );
return boost::python::eval(
myExpression,
mainNamespace,
mainNamespace );
不幸的是,该表达式仍然使用 Python 2.x 样式划分进行计算。
在 boost::P ython 中启用未来的正确方法是什么?
如何使用 boost::p ython 导入单个方法而不是整个库?
-
似乎最好的方法是使用脚本初始化解释器,该脚本从将来导入您想要的功能。
-
您可以使用 exec 和导入语句导入模块的子集。由于 future 的工作方式,向 exec 语句编译的代码提供指令,因此不能简单地导入 exec 然后执行评估。
文档指出:
在交互式口译员提示符下键入的未来语句将在口译员会话的其余部分生效。如果使用 -i 选项启动解释器,传递要执行的脚本名称,并且脚本包含 future 语句,它将在脚本执行后启动的交互式会话中生效。
可以通过执行具有所需未来导入的脚本来初始化 Python C API 中的解释器以使用 future。我无法让它工作。但我可能错误地使用了 API。
另一种选择是如下所示:
boost::python::object main_module = boost::python::import("__main__");
boost::python::object main_namespace = main_module.attr("__dict__");
std::string evalString = "3/2";
std::stringstream evalStringFunction;
evalStringFunction << "from __future__ import divisionn";
evalStringFunction << "def evalWithFuture(): return " << evalString;
boost::python::exec(evalStringFunction.str().c_str(), main_namespace,
main_namespace);
boost::python::object result = boost::python::eval("evalWithFuture()", main_namespace, main_namespace);
这里的想法是函数 evalWithFuture 将使用未来的导入进行编译。因为它是一个表达式,所以你可以在评估调用中使用它,它将使用正确的未来除法运算符。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- std::async from std::async in windows xp
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- from std::vector to adept::avector
- qt get child (Callout) from QChart
- 在C++中将Import模拟为来自python的功能
- Webassembly from Javascript
- Generate boost::uuids::uuid from boost::compute::detail::sha
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- Calling C++ dll from python
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- std::chrono 在从 main 或 from 类方法使用时给出不同的值
- 你如何在 boost::p ython 中"from __future__ import division"?