Langage C pour voir et se souvenir de la partie 4 Appelez le langage C depuis Python (argument) double

Reçoit un * b / c comme valeur de retour de Python avec des nombres réels a, b, c comme arguments.

capi.py


a,b,c=10.0,20.0,3.0
d=capi.Fcal(a,b,c) #Calculé en langage C
print(a*b/c) #Calculé avec python
print(d)

Résultat d'exécution
capi>python capi.py
66.66666666666667
66.66666666666667

capilib.c


#include <Python.h>
static PyObject* Fcal(PyObject* self, PyObject* args){
    double a,b,c,d;
    if (!PyArg_ParseTuple(args, "ddd",&a,&b,&c)){
        return NULL;
    }
    d=a*b/c;
    return Py_BuildValue("d", d);
}
// Function Definition struct
static PyMethodDef myMethods[] = {
    { "Fcal",Fcal, METH_VARARGS, "Fcal a*b/c"},
    { NULL }
};
static struct PyModuleDef myModule = {
    PyModuleDef_HEAD_INIT,"myModule","C API Module",-1,myMethods
};
PyMODINIT_FUNC PyInit_myModule(void){
    return PyModule_Create(&myModule);
}

** Le point d'attention est **

p.c


double a,b,c,d;
    if (!PyArg_ParseTuple(args, "ddd",&a,&b,&c)){
        return NULL;
    }
    d=a*b/c;
    return Py_BuildValue("d", d);
  1. "ddd" est converti en double.
  2. Py_BuildValue ("d", d) renvoie la valeur de retour avec une précision double. Si vous calculez avec float, ce sera différent de la valeur de python.

setup.py


from distutils.core import setup, Extension
setup(name = 'myModule', version = '1.0.0',  \
   ext_modules = [Extension('myModule', ['capilib.c'])])

** Création d'une bibliothèque **

capi>python setup.py install

Recommended Posts

Langage C pour voir et se souvenir de la partie 4 Appelez le langage C depuis Python (argument) double
Langage C pour voir et se souvenir de la partie 2 Appeler le langage C à partir de la chaîne Python (argument)
Langage C pour voir et se souvenir de la partie 5 Appel du langage C à partir du tableau Python (argument)
Langage C pour voir et se souvenir de la partie 3 Appelez le langage C depuis Python (argument) c = a + b
Langage C pour voir et se souvenir de la partie 1 Appeler le langage C depuis Python (bonjour le monde)
Aller au langage pour voir et se souvenir de la partie 8 Appeler le langage GO à partir de Python
Aller à la langue pour voir et se souvenir du langage Partie 7 C en langage GO
Appeler le langage C depuis Python (python.h)
Appeler des fonctions du langage C depuis Python pour échanger des tableaux multidimensionnels
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Appelez Matlab depuis Python pour optimiser
Appeler C depuis Python avec DragonFFI
Python pour passer d'une autre langue
Appeler C / C ++ depuis Python sur Mac
[Python] Hit Keras depuis TensorFlow et TensorFlow depuis c ++ pour accélérer l'exécution.
Appelez votre propre bibliothèque partagée en langage C à partir de Python à l'aide de ctypes
[Il n'est pas trop tard pour apprendre Python à partir de 2020] Partie 3 Python Language Basic (1)
De Python à l'utilisation de MeCab (et CaboCha)
Portage et modification du solveur de doublets de python2 vers python3.
Communication socket par langage C et Python
Générer un langage C à partir d'une expression S avec Python
Essayez de porter le programme «Programmation informatique numérique FORTRAN77» vers C et Python (partie 1)
Comment générer une séquence en Python et C ++
Écriture de journaux dans un fichier CSV (Python, langage C)
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Essayez de porter le programme "FORTRAN77 Numerical Computing Programming" vers C et Python (partie 3)
Appelez Rust de Python pour accélérer! Tutoriel PyO3: Partie des classes d'habillage ➀
Essayez de porter le programme "FORTRAN77 Numerical Computing Programming" vers C et Python (partie 2)
Appelez Rust de Python pour accélérer! Tutoriel PyO3: partie des classes d'emballage ➁
Appel de scripts Python à partir de Python intégré en C ++ / C ++
Liste de code Python à déplacer et à mémoriser
Je veux créer du code C ++ à partir de code Python!
Un moyen simple d'appeler Java depuis Python
L'histoire du portage du code de C vers Go (et vers la spécification du langage)
Essayez de créer un module Python en langage C
Changements de Python 2 à Python 3.0
Introduction au langage Python
Appelez Rust de Python pour accélérer! Tutoriel PyO3: Emballage d'une partie de fonction simple
Appelez Rust de Python pour accélérer! Tutoriel PyO3: Emballage d'une partie de fonction simple ➁
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
Apprenez les bases et les astuces des expressions canoniques Python à partir de zéro
J'ai essayé d'illustrer le temps et le temps du langage C
Orienté objet en langage C: "○ ✕ game" a été refacturé et porté en Python
Utilisez un langage de script pour une vie C ++ confortable-OpenCV-Port Python vers C ++ -
Transmettez les données OpenCV de la bibliothèque C ++ d'origine à Python
Comment appeler Python ou Julia à partir de Ruby (implémentation expérimentale)
Flirter de PHP à Python
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Porté du langage R de "Sazae-san's Janken Data Analysis" vers Python
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie1-
[First Ripple] [I am] Appeler JavaScript (Node.js) depuis Python et traiter Ripple
Introduction à l'API Socket apprise en langage C, partie 1, édition serveur
Installez mecab sur le serveur partagé Sakura et appelez-le depuis python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie2-
[Langage C] Comment créer, éviter et créer un processus zombie
Appelez dlm depuis python pour exécuter un modèle de régression à coefficient variable dans le temps
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (Partie 1)