Heim >Backend-Entwicklung >C++ >Wie extrahiere ich den Rückgabewert einer Python-Funktion, wenn sie von C/C aufgerufen wird?

Wie extrahiere ich den Rückgabewert einer Python-Funktion, wenn sie von C/C aufgerufen wird?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 01:23:14934Durchsuche

How to Extract a Python Function's Return Value When Called from C/C  ?

Extrahieren des Rückgabewerts aus einer in C/C aufgerufenen Python-Funktion

Das Aufrufen einer benutzerdefinierten Python-Funktion aus C/C ermöglicht erweiterte Funktionalität, Das Extrahieren des Rückgabewerts kann jedoch eine Herausforderung sein. Hier ist eine Lösung mit der Python C-API.

Das Python-Modul

Erstellen Sie ein Python-Modul (mytest.py):

import math

def myabs(x):
    return math.fabs(x)

Der C/C-Code

Importieren Sie den Python3-Interpreter in C/C (test.cpp):

#include <Python.h>

int main() {
    Py_Initialize();
    PyRun_SimpleString("import sys; sys.path.append('.')");

Funktion importieren und aufrufen

  1. Python-Modul importieren:
PyObject* myModuleString = PyString_FromString("mytest");
PyObject* myModule = PyImport_Import(myModuleString);
  1. Holen Sie sich eine Referenz zum Funktion:
PyObject* myFunction = PyObject_GetAttrString(myModule, "myabs");
  1. Konstruieren Sie die Funktionsargumente:
PyObject* args = PyTuple_Pack(1, PyFloat_FromDouble(2.0));
  1. Rufen Sie die Funktion auf:
PyObject* myResult = PyObject_CallObject(myFunction, args);

Rückgabewert extrahieren

Ergebnis konvertieren zu einem Double:

double result = PyFloat_AsDouble(myResult);

Verwendung

In Ihrem C/C-Code können Sie nun den extrahierten Rückgabewert (Ergebnis) verwenden:

printf("Absolute value: %f\n", result);

Hinweis: Denken Sie daran, bei diesen Vorgängen nach Fehlern zu suchen. Weitere Einzelheiten zur C-API finden Sie in der offiziellen Dokumentation.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich den Rückgabewert einer Python-Funktion, wenn sie von C/C aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn