Maison >développement back-end >C++ >Comment extraire la valeur de retour d'une fonction Python lorsqu'elle est appelée depuis C/C ?

Comment extraire la valeur de retour d'une fonction Python lorsqu'elle est appelée depuis C/C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 01:23:14931parcourir

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

Extraire la valeur de retour d'une fonction Python appelée en C/C

L'appel d'une fonction Python personnalisée à partir de C/C permet des fonctionnalités étendues, mais extraire la valeur de retour peut être difficile. Voici une solution utilisant l'API Python C.

Le module Python

Créer un module Python (mytest.py) :

import math

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

Le code C/C

Importer l'interpréteur python3 en C/C (test.cpp) :

#include <Python.h>

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

Importation et appel de la fonction

  1. Importer le module Python :
PyObject* myModuleString = PyString_FromString("mytest");
PyObject* myModule = PyImport_Import(myModuleString);
  1. Obtenez une référence au fonction :
PyObject* myFunction = PyObject_GetAttrString(myModule, "myabs");
  1. Construire les arguments de la fonction :
PyObject* args = PyTuple_Pack(1, PyFloat_FromDouble(2.0));
  1. Appeler la fonction :
PyObject* myResult = PyObject_CallObject(myFunction, args);

Extraire la valeur de retour

Convertir le résultat en un double :

double result = PyFloat_AsDouble(myResult);

Utilisation

Dans votre code C/C, vous pouvez désormais utiliser la valeur de retour extraite (résultat) :

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

Remarque : Pensez à vérifier d'éventuelles erreurs lors de ces opérations. Pour plus de détails sur la C-API, reportez-vous à la documentation officielle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn