17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Bonnes pratiques et optimisation du code<br />

CHAPITRE 13<br />

convention d’appel : prend la valeur METH_VARARGS ;<br />

docstring : définit la chaîne de caractères utilisée comme docstring.<br />

Pour max(), la table des méthodes est définie comme suit, et doit être obligatoirement<br />

renvoyée par la méthode d’initialisation du module, seule fonction non statique<br />

du module, qui porte toujours le nom initnommodule().<br />

Table des méthodes<br />

static PyMethodDef CalculsMethods[] = {<br />

{"max", max, METH_VARARGS, "Calcul le max de deux nombres"}<br />

};<br />

PyMODINIT_FUNC initcalculs(void)<br />

{<br />

(void) Py_InitModule("calculs", CalculsMethods);<br />

}<br />

Py_InitModule prend en paramètres le nom du module et le tableau, et renvoie un<br />

objet de type module qui est inséré dans le dictionnaire sys.modules lorsque le<br />

module est importé.<br />

Initialisation du module<br />

Une fois la table des méthodes prête, la fonction main() du module doit appeler tour<br />

à tour :<br />

Py_SetProgramName(), pour passer argv[0] (le nom du programme) à<br />

l’interpréteur ;<br />

Py_Initialize(), pour initialiser l’interpréteur ;<br />

appeler la méthode d’initialisation du module.<br />

Module calculs.py complet<br />

#include "Python.h"<br />

static PyObject *max(PyObject *self, PyObject *args)<br />

{<br />

int a;<br />

int b;<br />

int resultat;<br />

// récupération des paramètres<br />

if (!PyArg_ParseTuple(args, "ii", &a, &b))<br />

return NULL;<br />

473

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!