如何从C++创建Python Decimal对象

How do I create a Python Decimal object from C++?

本文关键字:Python Decimal 对象 创建 C++      更新时间:2023-10-16

。。。或可导入库中存在的任何Python对象。我在文档中找到了PyDateTime_*函数,用于从datetime模块创建对象,但我找不到任何与python十进制模块有关的函数。这可能吗?

如果有Boost.Python方式的话,寻找它,但如果没有,原生API就足够了。

在Boost.Python中,这将类似于

bp::object decimal = bp::import("decimal").attr("Decimal");
bp::object decimal_obj = decimal(1, 4);

应该足够简单。尽管未经测试,但以下内容应该有效:

PyObject * decimal_mod = PyImport_ImportModule("decimal");
assert(decimal_mod);
PyObject * decimal_ctor = PyObject_GetAttrString(decimal_mod, "Decimal");
assert(decimal_ctor);
PyObject * four = PyObject_CallFunction(decimal_ctor, "i", 4);
assert(four);

请记住,这里的所有三个PyObject *引用都应该在使用完后被递减(使用Py_DECREF())。此外,我在这里使用assert()用于教学目的。实际的代码应该有真正的错误处理。

此外,我在这里使用原始的Python/C API。我从未使用过boost python,所以我不知道存在什么差异(如果有的话)。