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
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
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
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)
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 :
Sortie :
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}.")
Une première traduction possible en C++17 :
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.
Sortie :
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"; }
Une deuxième traduction possible en C++17 :
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.
Sortie :
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"; }
En C++, il faudra apprendre les structures de données.
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.
- À 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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager