Расширение Python C -Почему методы, использующие аргументы ключевых слов, приводятся к PyCFunction

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

7
задан user1245262 21 April 2012 в 23:54
поделиться