IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

Construire puis utiliser la version C d'une fonction faite en Python


Sujet :

Interfaçage autre langage Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Construire puis utiliser la version C d'une fonction faite en Python
    Bonjour,
    j'ai la version Python suivante d'une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/env python
     
    def combinaisonNonRecursif(k,n):
        """Calcul de C(k;n) = n! / k!(n-k)! en utilisant
            C(k;n) = C(k-1;n-1) + C(k;n-1)
     
        Voir le document trianglePascalParColone.pdf ou trianglePascalParColone.ods (via Open Office Calc).
        Il montre comment calculer de colonnes en colonnes."""
        if k==0 or k==n:
            return 1
     
        if k==1 or k==n-1:
            return n
     
    # Ici on utilise : C(n-k;n).
        test = n-k
        if k > test:
            k = test
     
        colonneInter = [0]*(n+1)
        colonne = [x for x in range(n+1)]
     
        for i in range(2, k+1):
            colonneInter[i] = 1
     
            for j in range(i+1, n+1):
                colonneInter[j] = colonneInter[j-1] + colonne[j-1]
     
            colonne = colonneInter[:] # Attention avec la copie des tableaux...
     
        return(colonne[n])
    Je voudrais en faire une version en langage C ou C++ pour ensuite l'appeler à partir de Python afin d'améliorer les performances de calcul.

    Toute info. est la bienvenue.

    PS : pour la compilation, j'ai Code Block sous Linux et XCode sous MacO$

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Un bon exemple commenté :
    http://superjared.com/entry/anatomy-python-c-module/

    En gros je partirais sur ceci (code non testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <Python.h>
     
    static PyObject * combnorecurs(PyObject *self, PyObject *args) {
        int k, n;
        // parsing des arguments : on veut deux entiers 
        if (!PyArg_ParseTuple(args, "ii", &k, &n)) {
            return NULL;
        }
        // calculs,  ... etc
        //!!!!!  La fonction doit retourner un PyObject* !!!!!!
        //(un PyObject* etant n importe quel type python) 
    }
     
    static PyMethodDef methods[] = {
        {"combnorecurs", (PyCFunction)combnorecurs, METH_O, "Combinaison non recursive"},
        {NULL, NULL}
    };
     
    PyMODINIT_FUNC initcombinaison(void)
    {
        Py_InitModule("combinaison", methods);
    }

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Super le lien. Je vais essayer ce soir chez moi...

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Petite question suit la lecture du lien (je ne peux pas encore tester pour le moment). Existe-t-il une procédure pour utiliser le code C en local, dans un dossier et non dans Python ? Je peux préciser ma question si elle manque de clarté.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Si tu veux exécuter le code comme un programme binaire, je dirais non.

  6. #6
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Non, non. En fait, dans la page citée, le fichier est construit via distutils et se retrouve dans le path de Python. Du coup pour des tests, cela me fait un peu "peur"...

    De plus, si je veux distribuer mon code, il faudra donc que je fasse de même chez le futur utilisateur. Cela complique un peu les choses.

    Je vais déjà tenter de faire fonctionner l'exemple de la page citée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/05/2015, 19h31
  2. Réponses: 6
    Dernier message: 16/08/2010, 17h42
  3. Utilisation plusieurs versions IE sur une même machine
    Par ceweb dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 11/02/2010, 02h48
  4. Réponses: 1
    Dernier message: 28/09/2007, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo