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

Python Discussion :

Passage de python vers C++


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 907
    Points : 372
    Points
    372
    Par défaut Passage de python vers C++
    Bonjour,

    Je dois passer un programme de Python vers C++

    Je cherche une liste des équivalences rapide entre les instructions des 2 langages.

    Ou existe t'il des convertisseurs automatiques ?

    Merci,
    Christophe

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Il n'y a que rarement d'équivalence entre les instructions d'un langage de bas niveau (C++) et un langage de haut niveau (Python) parce que ce dernier, derrière une instruction simple, cache plusieurs (parfois beaucoup) de lignes de code dans le langage dans lequel il est implémenté.

    Et, il n'y a rien à faire, il faudra quand même apprendre le langage de destination, pour qui n'est pas aguerri aux messages d'erreur d'un compilateur ça peut se transformer en enfer.

    Éventuellement il existe Cython qui peut transformer un code Python en C. Il faudra adapter bien sur le code Python pour qu'il soit utilisable par Cython.

    Je ne l'ai jamais utilisé mais la doc à l'air assez bien faite.
    https://cython.org/#documentation

    Si ce doit être obligatoirement en C++ et pas en C, je ne connais aucune lib qui le fait.

    Quelle est la taille de ton code Python ?

    D'autre part si tu veux juste accélérer un processus, fonction mathématique, traitement d'image, etc., tu peux aussi simplement réimplémenter ce seul module en C++.

    Édit: en parcourant la doc de Cython, je vois ceci pour produire du C++:
    https://cython.readthedocs.io/en/lat...#primes-with-c

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    J'ai vu ce projet qui a l'air d'être pas mal suivi, mais jamais testé...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Bonjour,

    En C++, il faut se poser plus de questions qu'en Python. Il faut aussi savoir que le code ne sera pas toujours 100% équivalent.

    Prenons un exemple de code Python :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    employees = {
        "John": "software developer",
        "Maria": "salesperson",
        "Bruce": "manager",
    }
    for name, job in employees.items():
        print(f"{name} is a {job}.")
    Sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    John is a software developer.
    Maria is a salesperson.
    Bruce is a manager.
    Une première traduction possible en C++17 :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <map>
    #include <string>
     
    int main() {
        const std::map<std::string, std::string> employees = {
            {"John", "software developer"},
            {"Maria", "salesperson"},
            {"Bruce", "manager"}
        };
        for(auto& [name, job]: employees)
            std::cout << name << " is a " << job << ".\n";
    }
    Sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bruce is a manager.
    John is a software developer.
    Maria is a salesperson.
    Une deuxième traduction possible en C++17 :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <string_view>
    #include <unordered_map>
     
    int main() {
        const std::unordered_map<std::string_view, std::string_view> employees = {
            {"John", "software developer"},
            {"Maria", "salesperson"},
            {"Bruce", "manager"}
        };
        for(auto& [name, job]: employees)
            std::cout << name << " is a " << job << ".\n";
    }
    Sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bruce is a manager.
    Maria is a salesperson.
    John is a software developer.
    En C++, il faudra apprendre les structures de données.
    • À partir de Python 3.7, les clefs d'un dictionnaire correspondent à l'ordre d'insertion.
    • En C++, avec un std::map, les clefs sont triées. Sous le capot, c'est un arbre binaire de recherche.
    • En C++, avec un std::unordered_map, les clefs ne sont pas triées. Sous le capot, c'est une table de hachage.

    En C++, il faudra faire attention à la gestion de la mémoire.
    • En Python, la mémoire est gérée par un ramasse-miettes.
    • En C++, std::string contient une chaîne. Quand il est détruit, la chaîne est détruite.
    • En C++, un std::string_view pointe vers une chaîne sans en gérer la mémoire.

    Il y a aussi d'autres subtilités dans mes exemples que je ne vais pas détailler.

    Apprendre le C++ prendra du temps. Bon courage.

    EDIT 14h15 : const char* remplacé par std::string_view, plus idiomatique.

Discussions similaires

  1. Problème de passage de tableau de Python vers Fortran 90
    Par P.Math dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 31/03/2010, 11h01
  2. Passage de ASP vers PHP
    Par FoxLeRenard dans le forum Langage
    Réponses: 2
    Dernier message: 26/04/2006, 17h15
  3. Passage de paramètres vers un template xsl
    Par Le lag dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/04/2006, 18h20
  4. Problème passage Access 97 vers 2000
    Par chris76 dans le forum Access
    Réponses: 7
    Dernier message: 28/03/2006, 11h32
  5. Python vers C/C++ : listage des Cnp et Anp
    Par samW7 dans le forum Général Python
    Réponses: 2
    Dernier message: 05/12/2005, 21h38

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