Я изучаю 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 объявлен устаревшим? Если нет, есть ли время, когда я должен/должен его использовать?