Rozszerzenie Python C - Dlaczego metody używające argumentów słów kluczowych są rzutowane na PyCFunction

Uczę się o rozszerzeniach Python-C i zastanawiam się, dlaczego metody używające argumentów słów kluczowych muszą być rzutowane na PyCFunctions.

Moje rozumienie PyCFunction polega na tym, że pobiera dwa wskaźniki do PyObjects i zwraca pojedynczy wskaźnik do PyObject - np.

<code> PyObject* myFunc(PyObject* self, PyObject* args)
</code>

Jeśli zamierzam użyć funkcji, która używa argumentów słów kluczowych, ta funkcja weźmie trzy wskaźniki do PyObjects i zwróci pojedynczy wskaźnik do PyObject - np.

<code> PyObject* myFunc(PyObject* self, PyObject* args, PyObject* keywordArgs)
</code>

Jednak podczas tworzenia tablicy funkcji modułu (dla funkcji o nazwie „adder”):

<code>{ "adder", (PyCFunction)adder, METH_VARARGS | METH_KEYWORDS, "adder method" }
</code>

działa w porządku. Wydaje mi się, że rzucam float do int i wciąż muszę używać niecałkowitych części floatu. Gdybym nie widział tej pracy, pomyślałbym, że to nie zadziała. Czego tu nie rozumiem?

Widziałem też pewne odwołania do PyCFunctionWithKeywords, które wydają się mieć podpis funkcji, o którym myślałem, że jest mi potrzebne, ale mój kompilator skarżył się (ostrzegł) o „niezgodnych typach wskaźników”.

Czy PyCFunctionWithKeywords jest przestarzałe? Jeśli nie, czy jest czas, kiedy powinienem / muszę z niego korzystać?

questionAnswers(1)

yourAnswerToTheQuestion