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 :

Decouverte de Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Par défaut Decouverte de Python
    Bonjour à tous

    J'ai appris à programmer en C puis en C++ il y a un petit moment maintenant, et j'ai tenté (puis réussi en grande partie ) a créé un petit jeu avec interface graphique.

    Il faut savoir que la première fois que j'ai voulu tenter de programmer, ce fut a 14 ans. Et je suis tombé sur le tutoriel de Gerard Swinnen. A l'époque Python me semblait être d'une difficulté insurmontable et j'ai bien vite abandonné ce langage.

    Aujourd'hui, je commence a entrevoir les possibilitées du C/C++ et donc des autres langages. Or dernièrement je suis tombé sur un problème en C++ qui ma fait comprendre que ce langage est clairement trop difficile pour le moment ( une question de pointeur et de foncteur sur les vector de la STL ).

    Enfin bref ! Je me suis donc souvenu qu'il existait d'autres langages qui pouvaient peut être mieu me satisfaire. Python était (presque) parfait : orienté objet, simple (en tout cas en apparence ), assez connu, proche au niveau de la syntaxe avec le C++, et la cerise sur le gateau son logo était un serpent (j'adore les serpents ).

    J'ai donc relu le tuto pour apprendre python, mais j'ai quelques questions. La plupart du a mon utilisation du C++ :

    1) Je n'ai pas découvert de fonction main, n'existe t'elle pas en python (peut on l'implenter)? Est ce que ce morceau de code la remplace ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == "__main__":
    	Application().mainloop()
    2) Peut on déclarer des variables dans une classe sans qu'elle soit dans une méthode/constructeur ? C'est ce qui ma le plus choqué quand j'ai lu quelques codes sources, je n'arrivait jamais à savoir d'où venait les variables

    3) J'ai compris qu'un binding était la possibilité d'utiliser une bibliothèque d'un autre langage. Mais a quoi celà correspond t'il exactement ? Y a t'il une perte de vitesse ? (Ici je pense au binding PySFML)

    4) Avant je faisait un fichier.h par classe que je créait. Dans la mentalité python c'est toujours correct ?

    5) Python est il beacoup plus lent que du C ou du C++ ? Car bon, je suis un amateur donc je ne vais pas recréer Doom 3, a mon niveau la baisse de vitesse est elle significative ?

    6) Je pensait commencer par faire tout mes algorithmes en python puis les transcrire en C/C++ pour optimiser. Est ce réalisable dans le sens puis je ensuite l'integrer à un programme python ? L'inverse est il possible ?

    7) Si j'ai bien compris python est plus lent que d'autre langage car il est interprété au lieu d'être compilé. Mais j'ai aussi appris qu'il pouvait être compilé. Dans ce cas, est il au rapide qu'un autre langage ?

    Désolé pour ce gros pavé, mais bon ça me parait indispensable pour réellement comprendre python.

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par kump_ Voir le message
    1) Je n'ai pas découvert de fonction main, n'existe t'elle pas en python (peut on l'implenter)? Est ce que ce morceau de code la remplace ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == "__main__":
    	Application().mainloop()
    Le point d'entrée du programme est le module __main__ (le module que tu exécute lors du lancement). Il n'y a pas de fonction main() à proprement parler, comme en C, en C++ ou en Java. Par contre, c'est un pratique très répendue d'utiliser un fonxtion appelée main() comme point d'entrée de l'exécution. Voici un article de Guido van Rossum, le créateur de Python, à ce sujet: http://www.artima.com/weblogs/viewpost.jsp?thread=4829

    Citation Envoyé par kump_ Voir le message
    2) Peut on déclarer des variables dans une classe sans qu'elle soit dans une méthode/constructeur ? C'est ce qui ma le plus choqué quand j'ai lu quelques codes sources, je n'arrivait jamais à savoir d'où venait les variables
    Oui, on peut. Pour parler en langage C++, une telle variable devient un variable statique et sera commune à toutes les instances de la classe. Pour y accéder, il faut utiliser le nom de la classe MaClasse.ma_variable_statique

    Citation Envoyé par kump_ Voir le message
    3) J'ai compris qu'un binding était la possibilité d'utiliser une bibliothèque d'un autre langage. Mais a quoi celà correspond t'il exactement ? Y a t'il une perte de vitesse ? (Ici je pense au binding PySFML)
    La perte en perf due au glue code nécessaire pour programmer la passerelle (binding) entre la bibliothèque C (ou C++) et Python est relativement négligeable (si c'est programmé proprement)

    Citation Envoyé par kump_ Voir le message
    4) Avant je faisait un fichier.h par classe que je créait. Dans la mentalité python c'est toujours correct ?
    On peut créer un module par classe, mais ce n'est pas la manière de pratiquer la plus courante en Python.

    Citation Envoyé par kump_ Voir le message
    5) Python est il beacoup plus lent que du C ou du C++ ? Car bon, je suis un amateur donc je ne vais pas recréer Doom 3, a mon niveau la baisse de vitesse est elle significative ?
    Dans la plupart des cas, la différence des cas ne devrait pas être perturbante. Personnellement, je fais du calcul scientifique assez gourmand en Python. La rapidité de développement compense la perte de perf, et c'est andicapant, je réécrit en C++ ou en C, localement seulement.

    Citation Envoyé par kump_ Voir le message
    6) Je pensait commencer par faire tout mes algorithmes en python puis les transcrire en C/C++ pour optimiser. Est ce réalisable dans le sens puis je ensuite l'integrer à un programme python ? L'inverse est il possible ?
    Qu'est-ce qui est possible ? Intégrer ton code C++ à un programme Python ? Oui.

    Citation Envoyé par kump_ Voir le message
    7) Si j'ai bien compris python est plus lent que d'autre langage car il est interprété au lieu d'être compilé. Mais j'ai aussi appris qu'il pouvait être compilé. Dans ce cas, est il au rapide qu'un autre langage ?
    Non, Python est semi-compilé. L'étape de compilation génère du bytecode qui accélère pas mal l'exécution. Mais pour te donner une comparaison en me basant sur les derniers benchmarks que j'ai vu, Python reste plus lent que Java ou C#. Si tu as un processeur de la famille x86, tu peux utiliser le module psyco qui permet de faire une compilation en code machine à la volée et accélère le code d'un facteur 2 à 100 selon le type de code. Il y a également le projet PyPy qui travaille sur l'implantation d'un compilateur Python en Python et qui travaille notamment très dur sur la compilation à la volée (le créateur de Psyco est d'ailleurs dans le coup). PyPy est un projet financé par l'Union Européenne et son potentiel est énorme. Affaire à suivre

    Citation Envoyé par kump_ Voir le message
    Désolé pour ce gros pavé, mais bon ça me parait indispensable pour réellement comprendre python.
    Il n'y a pas de mal!
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Par défaut
    Voici un article de Guido van Rossum, le créateur de Python, à ce sujet: http://www.artima.com/weblogs/viewpost.jsp?thread=4829
    Donc si j'ai bien compris, python n'a pas de priorité comme en C ou C++. Ce n'est pas forcément la fonction main() qui s'execute en priorité. On peut nous même indiquer ce que l'on veut lancer en premier, c'est bien ça ?

    Oui, on peut. Pour parler en langage C++, une telle variable devient un variable statique et sera commune à toutes les instances de la classe. Pour y accéder, il faut utiliser le nom de la classe MaClasse.ma_variable_statique
    Arf ! N'y a t'il donc aucun moyen de mettre ses variables (unique pour chaque instance) visibles côte a côte ? Car je dois l'admettre que ça me semble étrange que l'on doit se souvenir de toutes nos variables.

    La perte en perf due au glue code nécessaire pour programmer la passerelle (binding) entre la bibliothèque C (ou C++) et Python est relativement négligeable (si c'est programmé proprement)
    D'accord.

    On peut créer un module par classe, mais ce n'est pas la manière de pratiquer la plus courante en Python.
    Comment fait on alors ?

    Dans la plupart des cas, la différence des cas ne devrait pas être perturbante. Personnellement, je fais du calcul scientifique assez gourmand en Python. La rapidité de développement compense la perte de perf, et c'est andicapant, je réécrit en C++ ou en C, localement seulement.
    D'accord ça me rassure merci.

    Qu'est-ce qui est possible ? Intégrer ton code C++ à un programme Python ? Oui.
    Super !

    Non, Python est semi-compilé.
    Mais j'ai lu quelque part qu'on pouvait créé des .exe . Pour ça il ne faut pas que le programme soit entièrement compilé ?

    En tout cas merci pour toutes tes réponses !

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par kump_ Voir le message
    Mais j'ai lu quelque part qu'on pouvait créé des .exe . Pour ça il ne faut pas que le programme soit entièrement compilé ?

    En tout cas merci pour toutes tes réponses !
    Oui, il est possible de créer des exe, par exemple en utilisant l'extension py2exe. Toutefois, py2exe ne permet pas de compiler ton programme. Tout ce que fait py2exe est d'empaqueter ton programme avec l'interpréteur python lui-même dans un fichier exécutable avec l'extension .exe. Ceci permet à un utilisateur n'ayant pas installé Python sur sa machine de pouvoir exécuter le programme. Personnellement, je trouve que cela ne sert à rien. Avec la bande passante actuelle, ce n'est certainement pas une grosse contrainte pour l'utilisateur, aujourd'hui, que d'installer Python sur sa machine (il le fait bien pour java, non?).

    Donc py2exe ne permet en rien de compiler son programme et d'en accélérer l'exécution. Il existe à mon avis aujourd'hui des techniques de déploiement meilleures que py2exe, comme par exemple l'usage du module setuptools, des oeufs (archive .egg comparable aux jar de Java) et le programme easy_install.

    Enfin bon, pour répondre à tes interrogations: "premature optimization is the root of all evil". N'anticipe pas les questions de performance. Ecris le code en Python en essayant d'optimiser les algorithmes. Ensuite, fais des mesures, profile ton code. Si tu trouves qu'il est trop lent, travail encore sur les algorithmes. S'il est encore et toujours trop lent, optimise localement en réécrivant une fonction critique en C ou en C++. Sur le plan de la vitesse de développement, tu remarqueras certainement un gain énorme. Même si certaines parties de ton code doivent être réimplantées en C, ce ne sera que quelques fonctions critiques, et il y a même de très fortes chances que tu n'aies pas besoin de le faire.

    Concernant la structuration du code avec une classe par module, je connais beaucoup d'adeptes de cette pratique. Personnellement, et cela me semble être globalement le cas dans la communauté Python, je préfère regrouper ayant un lien logique dans un même module plutôt que de créer un module par classe, puis un paquet pour regrouper les classes ayant un lien logique entre elles.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 26
    Par défaut
    En python, c'est l'indentation qui définit l'entrée du programme
    D'accord je pense avoir bien compris maintenant

    Mon truc c'est d'initialiser tous mes variables dans le constructeur, comme ça, j'ai une vue sur tous mes variables
    Pas bête! N'empeche ça me fais tout drôle de ne pas voir tout mes attributs

    Moi aussi, je suis originaire du C++, je fais (presque) toujours un fichier=une classe , faut dire que j'ai du mal à me séparer de cette habitude, mais attention, il y aura plus d'import que si on faisait un fichier=un module (ex: module audio, module video, ...), donc, c'est moins rapide
    Ok.

    Tout ce que fait py2exe est d'empaqueter ton programme avec l'interpréteur python lui-même dans un fichier exécutable avec l'extension .exe. Ceci permet à un utilisateur n'ayant pas installé Python sur sa machine de pouvoir exécuter le programme.
    Ha d'accord je n'avais pas compris ça comme ça .

    Enfin bon, pour répondre à tes interrogations: "premature optimization is the root of all evil". N'anticipe pas les questions de performance.
    Héhé! Il est vrai que me suis peut être trop vite inquiété. Mais bon, au moin maintenant je sais dans quoi je met les pieds

    Concernant la structuration du code avec une classe par module, je connais beaucoup d'adeptes de cette pratique. Personnellement, et cela me semble être globalement le cas dans la communauté Python, je préfère regrouper ayant un lien logique dans un même module plutôt que de créer un module par classe, puis un paquet pour regrouper les classes ayant un lien logique entre elles.
    Je vais tenter de m'y mettre alors.

    Bon et bien voilà, vous avez répondu a toutes mes questions ! Merci beaucoup !

  6. #6
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Citation Envoyé par kump_
    Donc si j'ai bien compris, python n'a pas de priorité comme en C ou C++. Ce n'est pas forcément la fonction main() qui s'execute en priorité. On peut nous même indiquer ce que l'on veut lancer en premier, c'est bien ça ?
    En python, c'est l'indentation qui définit l'entrée du programme
    ex:
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def uneFonction:
        print "Une fonction\n";
     
    # Main
     
    uneFonction()

    Citation Envoyé par kump_
    Arf ! N'y a t'il donc aucun moyen de mettre ses variables (unique pour chaque instance) visibles côte a côte ? Car je dois l'admettre que ça me semble étrange que l'on doit se souvenir de toutes nos variables.
    Mon truc c'est d'initialiser toutes mes variables dans le constructeur, comme ça, j'ai une vue sur toutes mes variables
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class MaClasse(object):
        def __init__(self):
            self.maVar1 = 0
            self.maVar2 = 0
            self.maVar3 = 0

    Citation Envoyé par kump_
    On peut créer un module par classe, mais ce n'est pas la manière de pratiquer la plus courante en Python.
    Comment fait on alors ?
    Moi aussi, je suis originaire du C++, je fais (presque) toujours un fichier=une classe , faut dire que j'ai du mal à me séparer de cette habitude, mais attention, il y aura plus d'import que si on faisait un fichier=un module (ex: module audio, module video, ...), donc, c'est moins rapide

    Citation Envoyé par kump_
    Non, Python est semi-compilé.
    Mais j'ai lu quelque part qu'on pouvait créé des .exe . Pour ça il ne faut pas que le programme soit entièrement compilé ?
    Oui, on peut créer des .exe avec python mais je pense que si Thierry a dit ça c'est pour corriger cette phrase que tu as écrit:
    Citation Envoyé par kump_
    Si j'ai bien compris python est plus lent que d'autre langage car il est interprété

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

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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