Introduction à Python
  • Back to Main Website
  • Home
  • Comprendre Et Installer Python
    • Comprendre Et Installer Python
    • Histoire du Langage
    • Exécution d’un Programme Python
    • Versions et Compilation de Python
    • Le PATH
    • Path.. et environnements virtuels!
    • Les IDEs
    • Les Notebooks

    • Quelques IDEs en Python
    • VsCode - L’IDE Flexible et Polyvalent
    • Spyder - Un IDE Orienté Science des Données
    • PyCharm - L’IDE orienté Python

    • Travaux Pratiques
    • TP Guidé - Installer plusieurs versions de python avec pyenv
    • TP - Construire son python depuis la source
  • Syntaxes et Concepts de Base
    • Syntaxes et Concepts de Base
    • Syntaxe et objets de Base Python
    • Fonctions et Modules
    • Introduction à la POO en Python

    • Travaux Pratiques
    • Exercices d’applications
    • Base de la POO: Exercice
  • Les Librairies Python
    • Les Librairies Python
    • Installer et importer des librairies en Python
    • Les DataFrames
    • Exemple sur pandas
    • Calcul Scientifique et Optimization
    • Machine Learning
    • Recupérer des données du net
    • Python - Aussi un language pour servir des données
    • Visualiser et présenter ces données avec Python

    • Travaux Pratiques
    • TP-3 Libraries
    • TP - Utiliser pandas
  • Bonne pratiques, Dangers, et Astuces
    • Bonne pratiques, Dangers, et Astuces
    • Mutabilité et Scope
    • Typage en Python
    • Asynchronie et Multiprocessing

    • Travaux Pratiques
    • Modern Portfolio Theory - Practical Work
    • Modern Portfolio Theory - Practical Work - Corrected version
    • TP Python for Finance: Introduction to Option Pricing
    • TP Python for Finance: Introduction to Option Pricing - Corrected Version
    • TP - Creer un outil de récupération de donnée
  • Concepts avancés
    • Concepts avancés
    • L’arbre Syntaxique Abstrait ou AST
    • Python Orienté Objet - Les Dunders
    • Python Orienté Objet - les Design Patterns

    • Travaux Pratiques
    • TP-5
  • Sujets de Projets possibles
    • Projets
    • Projets Introduction à Python - Millésime 2024
    • Projets Introduction à Python - Millésime 2025
  • Code source
  1. L’arbre Syntaxique Abstrait ou AST
  • Concepts avancés
  • L’arbre Syntaxique Abstrait ou AST
  • Python Orienté Objet - Les Dunders
  • Python Orienté Objet - les Design Patterns
  • Travaux Pratiques
    • TP-5

On this page

  • L’arbre Syntaxique Abstrait - Comment revoir ses bases en Python
    • Cours sur la Bibliothèque Standard Python et l’Abstract Syntax Tree (AST)
    • Le résultat de fibonacci étant mis en cache le nombre d’appel réel à la fonction est réduit de façon drastique, et le temps d’execution est réduit de facon supra-linéaire.

L’arbre Syntaxique Abstrait ou AST

Cours
Fondamentaux
Author

Remi Genet

Published

2025-02-12

L’arbre Syntaxique Abstrait - Comment revoir ses bases en Python


Cours sur la Bibliothèque Standard Python et l’Abstract Syntax Tree (AST)

Partie 1: La Valeur de la Bibliothèque Standard Python

Introduction à la Bibliothèque Standard

La bibliothèque standard Python est une collection riche et variée de modules et de fonctions intégrées qui sont automatiquement disponibles dans tout environnement Python. Elle couvre une large gamme de fonctionnalités, des opérations mathématiques aux interactions réseau.

Pourquoi Utiliser la Bibliothèque Standard
  1. Fiabilité : Les modules de la bibliothèque standard sont bien testés et maintenus.
  2. Portabilité : Le code qui utilise la bibliothèque standard est généralement portable sur toutes les plateformes où Python est disponible.
  3. Performance : Certains modules sont implémentés en C, offrant des performances optimales.
  4. Productivité : Permet de se concentrer sur les aspects uniques du projet, plutôt que de réinventer la roue.
Exemples de Modules Utiles
  • os et sys pour les interactions système.
  • re pour les expressions régulières.
  • datetime pour la manipulation de dates et d’heures.
  • json, csv pour la manipulation de fichiers et de données.

En plus des modules de base, la bibliothèque standard Python offre des outils avancés pour des tâches spécifiques.

asyncio :
    Gère la programmation asynchrone, permettant d'écrire du code concurrent en utilisant la syntaxe async/await.
    Utilisation pour des applications I/O-bound et pour améliorer les performances dans les applications réseau.

threading et multiprocessing :
    threading est utilisé pour la programmation multithread, utile pour l'exécution concurrente de plusieurs tâches.
    multiprocessing permet l'exécution parallèle de code en utilisant plusieurs processus, évitant ainsi le Global Interpreter Lock (GIL) de Python.

functools :
    Fournit des outils pour manipuler les fonctions. La fonction cache (dans Python 3.9+, lru_cache dans les versions antérieures) est particulièrement utile pour mémoriser les résultats des appels de fonctions coûteux.

Exemple d’Utilisation de functools.cache

Le résultat de fibonacci étant mis en cache le nombre d’appel réel à la fonction est réduit de façon drastique, et le temps d’execution est réduit de facon supra-linéaire.


Partie 2: Abstract Syntax Tree (AST) en Python

Qu’est-ce que l’AST ?

L’Abstract Syntax Tree (AST) est une représentation en arbre de la structure syntaxique du code source dans un langage de programmation. En Python, le module ast permet d’interagir et de manipuler ces arbres syntaxiques.

Utilisations de l’AST
  1. Analyse de Code : Permet d’examiner et de comprendre la structure du code.
  2. Modification de Code : On peut transformer le code source avant son exécution.
  3. Création d’Outils d’Analyse Statique : Construire des outils personnalisés pour analyser le style ou la qualité du code.
Exemple Simple avec AST
import ast

code = """
def add(a, b):
    return a + b
"""

# Parse le code source en AST
parsed_code = ast.parse(code)

# Parcourir et afficher les nœuds de l'AST
for node in ast.walk(parsed_code):
    print(type(node))
Pourquoi Utiliser l’AST ?
  1. Compréhension Approfondie du Langage : Travailler avec l’AST nécessite une compréhension des éléments syntaxiques de Python, ce qui enrichit la connaissance du langage.
  2. Développement de Compétences en Analyse de Code : L’AST est au cœur des outils d’analyse statique, et sa manipulation peut développer des compétences avancées en analyse de code.
Projet avec AST
  • Projet Suggéré : Créer un outil d’analyse statique simple ou un reformateur de code en utilisant l’AST.
  • Avantages : Ce type de projet offre une compréhension pratique de la structure du code Python et peut être un excellent ajout à un portfolio de développeur.
Exemple de Manipulation de l’AST
import ast
import astor

class PrintReplacer(ast.NodeTransformer):
    def visit_Print(self, node):
        return ast.Expr(value=ast.Call(func=ast.Name(id='print', ctx=ast.Load()), 
                                       args=node.values, keywords=[]))

source_code = """
print "Hello, World!"
"""

tree = ast.parse(source_code)
tree = PrintReplacer().visit(tree)
print(astor.to_source(tree))  # Convertit l'AST modifié en code source

Partie 3: AST pour la Transformation et l’Optimisation du Code

Modification du Code avec AST
  • Refactoring : L’AST permet de refactoriser le code de manière programmatique, ce qui est utile pour les grandes bases de code.
  • Optimisation : Peut être utilisé pour identifier et appliquer des optimisations de code.
Exemple d’Optimisation avec AST
import astor

class MyTransformer(ast.NodeTransformer):
    def visit_BinOp(self, node):
        if isinstance(node.op, ast.Add):
            return ast.BinOp(left=node.left, op=ast.Sub(), right=node.right)
        return node

tree = ast.parse("x + y")
transformed = MyTransformer().visit(tree)
print(astor.to_source(transformed))  # Affiche "x - y"

Conclusion

La bibliothèque standard Python est un trésor de fonctionnalités, offrant des outils pour presque toutes les tâches imaginables en programmation. Comprendre et utiliser efficacement ces outils est essentiel pour tout développeur Python. De plus, explorer l’AST et ses applications peut non seulement renforcer la compréhension du langage Python, mais aussi ouvrir la voie à des projets intéressants et éducatifs, tout en développant des compétences en analyse de code.

Back to top
Concepts avancés
Python Orienté Objet - Les Dunders

Introduction à Python, Rémi Genet.
Licence
Code source disponible sur Github

 

Site construit avec et Quarto
Inspiration pour la mise en forme du site ici
Code source disponible sur GitHub