Langage C pour voir et se souvenir de la partie 3 Appelez le langage C depuis Python (argument) c = a + b

Reçoit a + b comme valeur de retour de Python avec les entiers a et b comme arguments.

capi.py


import myModule as capi
a,b=10,20
c=capi.Cal(a,b) #c=a+b
print(c)

Quand tu cours

>python capi.py
30

capilib.c


#include <Python.h>
static PyObject* Cal(PyObject* self, PyObject* args){
    int a,b,c;
    if (!PyArg_ParseTuple(args, "ll",&a,&b)){
        return NULL;
    }
    c=a+b;
    return Py_BuildValue("l", c);
}
// Function Definition struct
static PyMethodDef myMethods[] = {
    { "Cal",Cal, METH_VARARGS, "Calc a+b"},
    { 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 **

    int a,b,c;
    if (!PyArg_ParseTuple(args, "ll",&a,&b)){
        return NULL;
    }
    c=a+b;
    return Py_BuildValue("l", c);
}

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
running install
running build
running build_ext
building 'myModule' extension
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\ProgramData\Anaconda3\include -IC:\ProgramData\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /Tccapilib.c /Fobuild\temp.win-amd64-3.7\Release\capilib.obj
capilib.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\ProgramData\Anaconda3\libs /LIBPATH:C:\ProgramData\Anaconda3\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64" /EXPORT:PyInit_myModule build\temp.win-amd64-3.7\Release\capilib.obj /OUT:build\lib.win-amd64-3.7\myModule.cp37-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.7\Release\myModule.cp37-win_amd64.lib
Construction de la bibliothèque\temp.win-amd64-3.7\Release\myModule.cp37-win_amd64.construction de lib et d'objet\temp.win-amd64-3.7\Release\myModule.cp37-win_amd64.Créer exp
Je génère du code.
La génération du code est terminée.
running install_lib
copying build\lib.win-amd64-3.7\myModule.cp37-win_amd64.pyd -> C:\ProgramData\Anaconda3\Lib\site-packages
running install_egg_info
Removing C:\ProgramData\Anaconda3\Lib\site-packages\myModule-1.0.0-py3.7.egg-info
Writing C:\ProgramData\Anaconda3\Lib\site-packages\myModule-1.0.0-py3.7.egg-info

Recommended Posts

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 2 Appeler le langage C à partir de la chaîne Python (argument)
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 5 Appel du langage C à partir du tableau Python (argument)
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
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Appeler le langage C depuis Python (python.h)
Appeler des fonctions du langage C depuis Python pour échanger des tableaux multidimensionnels
Appel de scripts Python à partir de Python intégré en C ++ / C ++
Essayez de créer un module Python en langage C
Utilisez un langage de script pour une vie C ++ confortable-OpenCV-Port Python vers C ++ -
Appelez Rust de Python pour accélérer! Tutoriel PyO3: Emballage d'une partie de fonction simple
Appelez Matlab depuis Python pour optimiser
Python a + = b et a = a + b sont différents
Appeler C depuis Python avec DragonFFI
Explication ABC127 A, B, C (python)
Appeler popcount depuis Ruby / Python / C #
Introduction à Protobuf-c (langage C ⇔ Python)
ABC128 Commentaire A, B, C (python)
[Python] renvoie A [ou / et] B
Explication ABC126 A, B, C (python)
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.
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[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
Passer la liste de Python vers C ++ par référence dans pybind11
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)
Résoudre ABC175 A, B, C avec Python
De Python à l'utilisation de MeCab (et CaboCha)
python> Arguments de mot clé> hoge (** {'a': 1, 'b': 2, 'c': 3})
Migration de Python2 vers Python3 (Python2 est reconstruit comme un environnement virtuel et coexiste)
Connectez-vous à postgreSQL depuis Python et utilisez des procédures stockées dans une boucle.
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
Appeler des commandes depuis Python (édition Windows)
Essayez de porter le programme «Programmation informatique numérique FORTRAN77» vers C et Python (partie 1)
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)
J'ai fait un module en langage C qui filtre les images chargées par Python
Appelez Rust de Python pour accélérer! Tutoriel PyO3: partie des classes d'emballage ➁
Envoyer un message de Slack à un serveur Python
Exécuter des scripts Python à partir d'applications C # GUI
Modifier Excel à partir de Python pour créer un tableau croisé dynamique
Comment générer une séquence en Python et C ++
Créer un tableau C à partir d'une feuille Python> Excel
Porté un compilateur de langage homebrew naïf sur Python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment générer un objet Python à partir de JSON
python memo- "sinon A et B" était "si (pas A) et B"
Liste de code Python à déplacer et à mémoriser