Maison >développement back-end >C++ >Comment puis-je appeler des méthodes Python et récupérer leurs valeurs de retour depuis C/C ?

Comment puis-je appeler des méthodes Python et récupérer leurs valeurs de retour depuis C/C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-04 21:43:11246parcourir

How Can I Call Python Methods and Retrieve Their Return Values from C/C  ?

Appel de méthodes Python et récupération des valeurs de retour à partir de C/C

Dans les environnements C/C, vous pouvez rencontrer des scénarios dans lesquels vous devez accéder fonctions définies dans les modules Python. Cet article explique comment invoquer ces fonctions efficacement et extraire leurs valeurs de retour.

Considérez l'extrait de code Python suivant :

import math

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

Pour appeler cette fonction depuis C , vous pouvez utiliser le Python Fonctionnalités de C-API. Commencez par inclure l'en-tête Python.h pour l'accès à l'API :

#include <Python.h>

Pour lancer l'environnement Python, invoquez Py_Initialize() :

Py_Initialize();

Ensuite, vous pouvez importer le module Python requis :

PyRun_SimpleString("import mytest;");

Pour exécuter la fonction personnalisée, invoquez la fonction PyObject_GetAttrString() pour obtenir une référence à celle-ci, créez des arguments à l'aide de la fonction PyTuple_Pack() et invoquez la fonction à l'aide de PyObject_CallObject() :

PyObject* myFunction = PyObject_GetAttrString(myModule, "myabs");
PyObject* args = PyTuple_Pack(1, PyFloat_FromDouble(2.0));
PyObject* myResult = PyObject_CallObject(myFunction, args);

Enfin, convertissez la valeur de retour Python en un double C à l'aide de la fonction PyFloat_AsDouble() :

double result = PyFloat_AsDouble(myResult);

Assurez-vous de gérer toutes les erreurs potentielles tout au long du processus en incorporant des mécanismes de gestion des exceptions. Cette approche fournit une méthode complète pour appeler des fonctions Python depuis C/C et accéder à leurs valeurs de retour.

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