Python C Extension – Warum sind Methoden, die Keyword-Argumente verwenden, die in PyCFunction gegossen werden

Ich lerne über Python-C-Erweiterungen und bin verwirrt darüber, warum Methoden, die Keyword-Argumente verwenden, in PyCFunctions geworfen werden müssen.

Mein Verständnis von einer PyCFunction ist, dass es zwei Zeiger auf PyObjects nimmt und einen einzelnen Zeiger auf ein PyObject zurückgibt – zB

  • Bei der Verwendung von RMSE-Verlust in TensorFlow bekomme ich sehr kleine Verlustwerte, die kleiner als 1 sind
  • "Ausführbarer nicht angegeben" Fehler in Pycharm
  • Wie bekomme ich Unicode-Monatsnamen in Python?
  • Wie finde ich eine Tabelle nach einem Text String mit BeautifulSoup in Python?
  • Wie kann ich NaN-Werte als Sonderfarbe mit Implow in Matplotlib aufstellen?
  • Python 3, easy_install, Pip und Pypi
  • PyObject* myFunc(PyObject* self, PyObject* args) 

    Wenn ich eine Funktion verwende, die Keyword-Argumente verwendet, dann wird diese Funktion drei Zeiger auf PyObjects und gibt einen einzelnen Zeiger auf ein PyObject zurück – zB

      PyObject* myFunc(PyObject* self, PyObject* args, PyObject* keywordArgs) 

    Allerdings, wenn ich das Modul Funktionen Array (für eine Funktion namens 'Addierer'):

     { "adder", (PyCFunction)adder, METH_VARARGS | METH_KEYWORDS, "adder method" } 

    funktioniert gut. Es fühlt sich an, als würde ich einen Schwimmer zu einem int werfen und immer noch die nicht-ganzzahligen Teile des Schwimmers benutzen. Wenn ich diese Arbeit nicht gesehen hätte, hätte ich gedacht, dass es nicht funktionieren würde. Was verstehe ich hier nicht?

    Außerdem habe ich einige Verweise auf eine PyCFunctionWithKeywords gesehen, die die Funktion Signatur zu haben scheint Ich dachte, ich brauchte, aber mein Compiler beschwerte (gab Warnungen) über "inkompatible Zeigertypen".

    Wurde PyCFunctionWithKeywords veraltet? Wenn nicht, gibt es eine Zeit, in der ich es benutzen sollte

  • Matplotlib Colorbar wissenschaftliche Notation Offset
  • Django-Datenbank-Abfrage: Wie filme ich Objekte nach Datumsbereich?
  • Mit stdint mit swig und numpy.i
  • Verbessern der Secuity eines Python-CGI-Skripts, das Benutzerkonten erstellt
  • Wechsel von PIL zu Kissen auf einem Mac
  • Django - Admin - Wie überschreibe ich change_list Vorlage für Model Proxy?
  • One Solution collect form web for “Python C Extension – Warum sind Methoden, die Keyword-Argumente verwenden, die in PyCFunction gegossen werden”

    Wenn Ihre Funktion Keyword-Argumente behandelt, muss sie einem PyCFunctionWithKeywords entsprechen. Allerdings macht C keine Überladung, und die von PyMethodDef erstellte Struktur ist definiert, um eine PyCFunction zu erwarten, anstatt einen völlig unkontrollierten void * zu sagen. Du musst also deine PyCFunctionWithKeywords auf eine PyCFunction werfen, um den Compiler zu beschweren, das ist alles.

    Denken Sie daran, dass Sie auch METH_KEYWORDS in den Flags übergeben müssen, um Python zu sagen, dass Ihre Funktion die Signatur eines PyCFunctionWithKeywords hat, nicht eine PyCFunction.

    Python ist die beste Programmiersprache der Welt.