pythoncextension为什么使用关键字参数的方法被强制转换为PyCFunction

2024-10-01 13:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Python-C扩展,对于为什么使用关键字参数的方法必须强制转换为pyc函数感到困惑。在

我对PyCFunction的理解是,它有两个指向PyObjects的指针,并返回一个指向PyObject的指针—例如

 PyObject* myFunc(PyObject* self, PyObject* args)

如果我要使用一个使用关键字参数的函数,那么这个函数将带三个指向PyObjects的指针,并返回一个指向PyObject的指针

^{pr2}$

但是,当我创建module functions数组时(对于名为“adder”的函数):

{ "adder", (PyCFunction)adder, METH_VARARGS | METH_KEYWORDS, "adder method" }

工作正常。感觉就像我把一个float转换成一个int,但仍然需要使用float的非整数部分。如果我没有看到这个工作,我会认为它不会工作。我有什么不明白的?在

另外,我看到一些对PyCFunctionWithKeywords的引用,它似乎有我认为我需要的函数签名,但是我的编译器抱怨(给出了警告)关于“不兼容的指针类型”。在

PyCFunctionWithKeywords是否已弃用?如果没有,有没有时间我应该/必须使用它?在


Tags: 方法函数参数关键字floatmyfunc指向pyobject
1条回答
网友
1楼 · 发布于 2024-10-01 13:37:44

如果您的函数处理关键字参数,那么它必须对应于PyCFunctionWithKeywords。但是,C不重载,而且PyMethodDef构建的结构被定义为期望PyCFunction,而不是完全未经检查的void*。因此,您必须将PyCFunctionWithKeywords强制转换为pycffunction,以停止编译器的抱怨,仅此而已。在

请记住,您还必须在标志中传递METH_关键字,以告诉Python您的函数具有PyCFunctionWithKeywords的签名,而不是PyCFunction的签名。在

相关问题 更多 >