我正在学习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是否已弃用?如果没有,有没有时间我应该/必须使用它?在
如果您的函数处理关键字参数,那么它必须对应于PyCFunctionWithKeywords。但是,C不重载,而且PyMethodDef构建的结构被定义为期望PyCFunction,而不是完全未经检查的void*。因此,您必须将PyCFunctionWithKeywords强制转换为pycffunction,以停止编译器的抱怨,仅此而已。在
请记住,您还必须在标志中传递METH_关键字,以告诉Python您的函数具有PyCFunctionWithKeywords的签名,而不是PyCFunction的签名。在
相关问题 更多 >
编程相关推荐