问题标签 [python-c-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
665 浏览

python - python中实例变量和属性之间的区别?

因此,用于编写扩展的 python 文档是这样说的:

“我们希望将我们的实例变量作为属性公开。有很多方法可以做到这一点。最简单的方法是定义成员定义:

并将定义放在 tp_members 槽中:

但是,我们已经将实例变量放入了 Noddy 结构体中:

所以我的问题是为什么我们把它们放在这两个地方。我的印象是,这是因为我们希望类型和实例都拥有它们,以便在实例更新后保留类型值。但是如果是这样的话,如果我们改变类属性,实例值是如何更新的呢?像这样:

0 投票
1 回答
1048 浏览

python - 如何从 C-API 中按名称调用 python 函数?

从 c-api 中,我想按名称调用 python 函数。然后,我将使用 Python 对象列表作为参数调用该函数。

在 Python 文档中,我不清楚如何从主 Python 解释器获取“可调用”对象。

任何帮助表示赞赏:

  1. 从函数中获取地址
  2. 使用我的 PythonObject 作为参数调用该函数。

我正在使用 Python 2.x 系列进行开发。

0 投票
1 回答
327 浏览

python - 通过 C-API 向模块添加新命令?

如何通过 C-API 向我的模块动态添加方法?我有很多需要注册的函数,它们不在同一个数组中。我假设我可以使用 NULL 方法表初始化模块,因为文档说这是可能的。

一次添加我的方法的函数的名称是什么。

0 投票
4 回答
2369 浏览

python - 如何在 Python C-API 中获取当前函数名?

我实现了一堆函数,它们是从 Python 解释器调用的同一个 C 函数中分派的:

没想到self是NULL,我需要获取当前正在调用的函数名。有什么方法可以获取这些信息吗?

我有几十个函数都在通过这个例程。此命令将所有选项处理成 C++ 映射并将其传递给每个命令的实现。

更新: http ://docs.python.org/extending/extending.html#a-simple-example明确表示“self 参数指向模块级函数的模块对象;对于方法,它将指向对象实例.",但是在链接到 python 2.6 时,我得到了 null。

0 投票
1 回答
4185 浏览

python - c++0x std::shared_ptr 与 boost::shared_ptr

我有一个大量使用shared_ptr和 STL 的 c++ 代码。一个常见的标题说

我现在想切换到 c++0x 以利用语言特性,使用 gcc 4.6 和-std=c++0x. 然而std::shared_ptr,现在也有,导致未指定shared_ptrboost::shared_ptrvs std::shared_ptr)的歧义。

改为std::shared_ptr改为时,如下所示:

然后我遇到了问题boost::python,它boost::shared_ptr仅适用于(至少无需进一步摆弄):

因此,我的问题是

  • 如果有一个简单的解决方案来解决和之间的歧义boost::shared_ptrstd::shared_ptr除了现在不使用 c++0x),还有
  • ifboost::shared_ptr最终将只是std::shared_ptr;的别名 这将自动解决我的问题。

谢谢!

0 投票
1 回答
3947 浏览

python - 从 C 函数构建 PyObject*?

我将 Python 嵌入到我正在制作的 C++ 库中。我希望用户能够以函数指针的形式传递 C 函数,PyObject* (fpFunc*)(PyObject*,PyObject*);以便我可以在嵌入式 Python 中使用这些函数。

所以我有一个函数指针,我知道可以使用PyMethodDefstruct 将此函数作为模块的方法并将其传递给Py_InitModule("module", ModMethods);,从而获得一个PyObject* module我可以轻松从中获取函数的函数。

但是,我真正欣赏的是能够即时创建此功能,而不必每次都重新创建另一个模块。

我已经查看了 Python 文档和一些 Python 标头,以考虑一种没有真正成功的 hacky 方式......但我想知道是否有更传统的方式来做到这一点。

据我了解,每个函数都属于一个模块,甚至__builtin__,所以我想我至少需要一个模块。

关于如何实现这一目标的任何想法?

0 投票
1 回答
403 浏览

python - 如何检查 PyObject* 是否指向类型 numpy.uint8

如何使用 Python C-API 检查 PyObject* 是否指向 numpy.uint8 等类型?

(请注意,我想检查 PyObject* 是否指向 numpy.uint8 类型,而不是它是否指向 numpy.uint8 类型的实例。)

0 投票
1 回答
657 浏览

python - 使用 C 将 numpy 数组对象拆分为两个不同大小的向量

我有

X 作为输入 --- 这是 dtype 对象,具有以下结构 x=[[1,2,3,4...n 个元素],[1 个元素],[1,2,...m 个元素], [1 个元素]]

为了模仿输入...

我将 X 作为参数传递给我的 Python C 扩展作为 PyArray_Object

现在我被困在这里,因为我不确定如何将其拆分为 4 个对象请任何人都可以给我一些关于此的指示...

0 投票
1 回答
698 浏览

python - 使用 C-API 在 Numpy 数组中反转轴

我正在使用 Python C-API 将一些 C++ 代码包装为 Python 包。最后,我必须在一个 numpy 数组中反转一个轴,即做

x = x[:, ::-1]

有没有办法使用 Numpy C-API 做到这一点?我知道有转置和交换轴的例程,但我没有找到很多关于索引的信息。有任何想法吗?谢谢,安迪

0 投票
1 回答
1374 浏览

python - Python:PyDateTime_FromTimestamp 的用法

我正在开发一个 python c-extension,并希望创建一个带有 unix 时间戳的 python datetime 对象实例。

在文档站点(http://docs.python.org/c-api/datetime.html)上,我找到了 PyDateTime_FromTimestamp() 函数,它根据输入参数返回一个新的引用。

描述如下: 给定一个适合传递给 datetime.datetime.fromtimestamp() 的参数元组,创建并返回一个新的 datetime.datetime 对象。

我尝试使用 PyFloat_Object 调用该函数,但该函数始终返回 NULL(即使我只是输入 0)。

有人有一个例子,我必须如何调用该函数,或者可以提示需要什么样的参数元组才能使其工作?

谢谢!