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
Version imprimable
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é...
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:
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:
1
2
3 John is a software developer. Maria is a salesperson. Bruce is a manager.
Sortie :Code:
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:
1
2
3 Bruce is a manager. John is a software developer. Maria is a salesperson.
Sortie :Code:
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:
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.