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 :

Fonctionnement de l'exécution du code en Python


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 37
    Points
    37
    Par défaut Fonctionnement de l'exécution du code en Python
    Bonjour. Je débute en Python et j'aimerais avoir des informations sur la façon dont Python exécute le code en mode console ou en mode script.
    Je n'ai pas réussi à trouver des réponses claires et précises et j'ai trouvé tout et n'importe quoi.
    Est-ce que l'interpréteur Python prend chaque instruction, l'analyse, la convertit en langage machine et l'exécute pour continuer avec l'instruction suivante?
    J'ai lu aussi qu'il pouvait y avoir création de bytecode avant exécution à la volée?
    Y a-t-il une différence d'exécution entre le mode console et le mode script?
    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cal23 Voir le message
    Bonjour. Je débute en Python et j'aimerais avoir des informations sur la façon dont Python exécute le code en mode console ou en mode script.
    Je n'ai pas réussi à trouver des réponses claires et précises et j'ai trouvé tout et n'importe quoi.
    Est-ce que l'interpréteur Python prend chaque instruction, l'analyse, la convertit en langage machine et l'exécute pour continuer avec l'instruction suivante?
    J'ai lu aussi qu'il pouvait y avoir création de bytecode avant exécution à la volée?
    Y a-t-il une différence d'exécution entre le mode console et le mode script?
    Merci.
    Bonjour,

    Le mieux reste encore de commencer par là : http://www.developpez.net/forums/d13...r/#post7516008

    Si vous vous intéressez au fonctionnement des langages, étudiez GNU Bison : http://fr.wikipedia.org/wiki/GNU_Bison

    Et plus généralement le concept Backus-Naur Form (BNF) : http://fr.wikipedia.org/wiki/Forme_de_Backus-Naur

    Et aussi : http://fr.wikipedia.org/wiki/Analyse_syntaxique

    http://fr.wikipedia.org/wiki/Bytecode

    https://docs.python.org/2/glossary.html#term-bytecode

    https://docs.python.org/3.4/library/dis.html

    https://docs.python.org/3.4/library/language.html

    http://effbot.org/zone/python-compile.htm

    etc, etc.

    bref, est mon ami.

    @+.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    J'ai lu le premier lien qui ne répond pas tout à fait à ma question.
    Il est écrit que Python est un langage interprété: "Cet interpréteur va lire l'ensemble du code et le traduire en temps réel à la machine pour exécution"
    Il y a du bytecode créé au passage, puis il y a une conversion en langage machine par l'interpréteur?
    Et ensuite, il est écrit: "Il y a aussi bien entendu la possibilité de créer un Byte Code qui est une préinterprétation du code pour la machine (extension .pyc)".
    Donc si on crée un fichier .py, il sera converti automatiquement en .pyc avant d'être exécuté par l'interpréteur?
    Et si on est en mode console?

    Les liens suivants ne répondent pas à ces questions.

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Il y a du bytecode créé au passage, puis il y a une conversion en langage machine par l'interpréteur?
    Non il n'y a pas de conversion naturelle en langage machine, mais on peut à l'aide de l'interfaçage C/Python.

    Donc si on crée un fichier .py, il sera converti automatiquement en .pyc avant d'être exécuté par l'interpréteur?
    Non, pour cela tu dois importer le module à l'aide de la ligne de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python3 -c 'import module'
    On peut utiliser aussi py_compile dans un code python

    Et si on est en mode console?
    On importe simplement le module dans l'interpréteur, dans ce cas dans le même dossier sera créé un fichier représentant le module modifié en byteCode, dans ce cas l'exécution en sera un peu accélérée.

    Pour la console voir la ligne de commande écrite ci-dessus.
    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)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Salut,

    Citation Envoyé par cal23 Voir le message
    Il est écrit que Python est un langage interprété: "Cet interpréteur va lire l'ensemble du code et le traduire en temps réel à la machine pour exécution"
    Il y a du bytecode créé au passage, puis il y a une conversion en langage machine par l'interpréteur
    La difficulté ici est de savoir de quelle machine on parle.
    Exemple "à la console", je définis une fonction foo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> def foo():
    ...     print ('hello')
    ...
    Le boulot de l'interpréteur sera de "compiler" le "corps de la fonction" et de construire l'objet (fonction) associé (qu'on pourra appeler plus tard). Pour voir le code machine, on peut utiliser le module "dis":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> import dis
    >>> dis.dis(foo)
      2           0 LOAD_GLOBAL              0 (print)
                  3 LOAD_CONST               1 ('hello')
                  6 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
                  9 POP_TOP
                 10 LOAD_CONST               0 (None)
                 13 RETURN_VALUE
    >>>
    On a bien un code machine mais c'est celui de la machine virtuelle Python (et non du code machine du processeur "physique" i.e. le X86 qui tourne dans le PC).

    Et ensuite, il est écrit: "Il y a aussi bien entendu la possibilité de créer un Byte Code qui est une préinterprétation du code pour la machine (extension .pyc)".
    La console, c'est sympa pour tester des bouts de code mais on va sauvegarder çà dans des fichiers scripts pour ne pas les ré-écrire à chaque fois. Par défaut, "la compilation" d'un script *importé* va construire un .pyc - c'est toujours ca de moins à faire à l'éxécution suivante.

    Donc si on crée un fichier .py, il sera converti automatiquement en .pyc avant d'être exécuté par l'interpréteur?
    Et si on est en mode console?
    De mémoire, seul les scripts importé génèrent un .pyc, le script principal est simplement compilé (pas sauvegardé). En mode console, les (blocs d')instructions sont compilés à l'entrée d'un CRLF. Si elle est incomplète, le prompt devient '...' pour signaler que le parseur d'instructions attend une suite.

    Je débute en Python et j'aimerais avoir des informations sur la façon dont Python exécute le code en mode console ou en mode script.
    Si vous débutez en programmation, ce genre de réponse est bien trop technique pour être d'une grande utilité mais pas facile de faire simple. Si vous savez déjà programmer, lisez les sources du module code. La classe InteractiveConsole montre comment çà se passe.

    Bon courage,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Merci pour cette réponse.
    Et y a-t-il une différence entre l'interpréteur et la machine virtuelle Python?Si oui laquelle?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Citation Envoyé par cal23 Voir le message
    Merci pour cette réponse.
    Et y a-t-il une différence entre l'interpréteur et la machine virtuelle Python?Si oui laquelle?
    On pourrait dire que la "machine virtuelle Python" est l'abstraction réalisée, construite par... l'interpréteur.
    L'interpréteur est un exécutable "python.exe" adapté pour Windows, OSX, Linux,... qui fera que votre script, lancé sur ces différents OS, produira des résultats comparables.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/04/2014, 13h16
  2. Exécution de code python
    Par P.G dans le forum Général Python
    Réponses: 5
    Dernier message: 17/01/2014, 21h34
  3. Exécuter un code python en C++
    Par hannibal.76 dans le forum Débuter
    Réponses: 8
    Dernier message: 24/07/2012, 17h30
  4. Exécuter du code python dans un string (python -c cmd)
    Par piloupy dans le forum Général Python
    Réponses: 2
    Dernier message: 14/11/2010, 02h10
  5. Réponses: 7
    Dernier message: 03/02/2005, 18h20

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