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
Libérer: 2024-12-25 01:23:14
original
1029 Les gens l'ont consulté

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)
Copier après la connexion

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('.')");
Copier après la connexion

Importation et appel de la fonction

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

Extraire la valeur de retour

Convertir le résultat en un double :

double result = PyFloat_AsDouble(myResult);
Copier après la connexion

Utilisation

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

printf("Absolute value: %f\n", result);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal