我正在学习 Python-C 扩展,并且对为什么必须将使用关键字参数的方法强制转换为 PyCFunctions 感到困惑。
我对 PyCFunction 的理解是它需要两个指向 PyObjects 的指针并返回一个指向 PyObject 的指针 - 例如
PyObject* myFunc(PyObject* self, PyObject* args)
如果我要使用一个使用关键字参数的函数,那么这个函数将采用三个指向 PyObjects 的指针并返回一个指向 PyObject 的指针 - 例如
PyObject* myFunc(PyObject* self, PyObject* args, PyObject* keywordArgs)
但是,当我创建模块函数数组时(对于名为“加法器”的函数):
{ "adder", (PyCFunction)adder, METH_VARARGS | METH_KEYWORDS, "adder method" }
工作正常。感觉就像我将浮点数转换为 int 并且仍然必须使用浮点数的非整数部分。如果我没有看到这项工作,我会认为它不会工作。我在这里不明白什么?
此外,我看到一些对 PyCFunctionWithKeywords 的引用,它似乎具有我认为我需要的函数签名,但我的编译器抱怨(发出警告)关于“不兼容的指针类型”。
PyCFunctionWithKeywords 是否已弃用?如果没有,是否有时间我应该/必须使用它?