Python Compile : exécuter du code Python à l’aide d'une fonction

Pour exécuter directement des lignes de code individuelles ou un bloc de code et stocker le résultat dans une variable, vous pouvez utiliser la fonction Python Compile. Elle vous renvoie un objet code que vous pouvez exécuter.

Applications possibles

Si vous ne voulez pas exécuter des instructions de code individuelles directement dans votre programme Python, mais seulement les affecter à une variable, vous pouvez utiliser la fonction Python Compile. Elle sert à convertir le code source en code objet et vous renvoie un objet que vous pouvez ensuite exécuter à l’aide de Python exec. Vous pouvez également passer un fichier à la fonction Python Compile à partir de laquelle le code source est extrait.

Conseil

Vous utilisez Python comme un langage de programmation efficace pour votre projet Web ? Deploy Now de IONOS peut vous aider à renforcer votre efficacité en déployant vos sites Web à tout moment via GitHub. L’aperçu en temps réel vous permet de visualiser l’état actuel de votre projet en direct à tout moment en quelques clics.

Syntaxe de Python Compile

La fonction Python Compile peut être appelée avec jusqu’à six paramètres différents, mais seuls les trois premiers paramètres sont obligatoires. Les autres paramètres de la fonction sont facultatifs et peuvent être définis selon vos besoins pour spécifier le comportement de la fonction.

compile(source, filename, mode, flags = 0, dont_inherit = False, optimize = -1)
python

On comprend mieux la fonction Compile en faisant le tour des paramètres individuels.

Paramètre Facultatif Description
source non Vous passez ici ce que vous voulez compiler. Il s’agit principalement de chaînes, mais vous pouvez également transmettre des objets octets ou des objets AST.
filename non À ce stade, vous spécifiez la source du fichier de l’objet à compiler. En l’absence de fichier, vous pouvez écrire ce que vous voulez. Le paramètre doit cependant toujours être défini.
mode non Dans le paramètre mode, vous spécifiez comment compiler. Vous pouvez choisir entre les valeurs suivantes :
  • eval : les différentes expressions sont évaluées avec eval.
  • exec : les blocs de code sont évalués avec exec.
  • simple : vous utilisez single pour les déclarations individuelles interactives.
flags oui Vous pouvez spécifier ici comment la source doit être compilée précisément. Toutefois, vous pouvez ignorer ce flag pour la grande majorité des cas d’utilisation.
dont_inherit oui Tout comme flag, le paramètre dont_inherit sert à spécifier la compilation de votre source.
optimize oui Le paramètre optimize vous permet de déterminer le niveau d’optimisation de votre processus de compilation.

Application de Python Compile

On peut s’appuyer sur un exemple de code pour illustrer le fonctionnement de Python Compile :

codeAsString = 'x = 10\ny = 7\nres = x * y\nprint("result = ", res)'
codeObject = compile(codeAsString, ' ', 'exec')
exec(codeObject)
python

Tout d’abord, définissez la variable nommée codeAsString, qui stocke le code Python simple suivant sous la forme d’une chaîne Python :

x = 10
y = 7
res = x * y
print("result = ", res)
python

Ne vous laissez pas dérouter par la présence de « \n » dans la chaîne codeAsString, car il s’agit ici du caractère de contrôle qui marque un saut de ligne. Vous voyez ainsi que vous pouvez simplement stocker votre code Python sous forme de chaîne dans une variable courante. Vous avez néanmoins besoin de la fonction Compile pour vous assurer que le code ne sera pas uniquement interprété comme une simple chaîne. L’appel de la fonction Compile dans l’exemple ci-dessus utilise uniquement les paramètres requis.

Vous passez en premier ce que vous voulez compiler, à savoir votre chaîne. Vous spécifiez ensuite la source du fichier de votre chaîne. Comme la chaîne a été définie directement dans le code et n’a pas été lue à partir d’un fichier, il suffit de spécifier la chaîne vide. En théorie, vous pouvez cependant utiliser n’importe quelle chaîne de votre choix.

Le dernier paramètre suscite à nouveau notre attention : comme notre chaîne codeAsString est un bloc de code entier, comme le montre la résolution de chaîne dans le deuxième exemple de code, nous utilisons le paramètre exec. Gardez à l’esprit qu’il s’agit d’une chaîne et n’oubliez donc pas les guillemets.

Le résultat de la fonction Python Compile est affecté à la variable nommée codeObject dans l’exemple de code ci-dessus. Il contient maintenant précisément ce que son nom suggère : un objet code. L’aspect particulier d’un objet code est que vous pouvez l’exécuter à tout moment avec un appel de la fonction exec en Python. C’est exactement ce qui se passe dans la dernière ligne de code, de sorte que le programme affichera en fin de compte « result = 70 ».

Compiler une seule instruction

Si vous ne voulez compiler qu’une seule instruction de code, vous devez ajuster le troisième paramètre lors de l’appel de la fonction Python Compile. Ceci est dû au fait que le mode eval est utilisé pour les instructions individuelles. Un exemple nous éclaire ici aussi :

singleInstruction = 'print("Hello World!")'
codeObject = compile(singleInstruction, ' ', 'eval')
exec(codeObject)
python

En fait, peu de choses ont changé ici. Ici aussi, une chaîne contenant du code Python est créée. Contrairement à l’exemple précédent, la chaîne ne contient qu’une seule instruction Python print. Cela nécessite l’utilisation du mode eval, qui est invoqué pour évaluer des instructions individuelles.

Maintenant, si vous exécutez à nouveau votre objet code à l’aide de la fonction exec, vous verrez que tout fonctionne comme prévu. Votre programme affiche « Hello World! » à l’écran.

Traiter le code source à partir de sources de fichiers

Dans les exemples précédents, nous avons toujours défini le code source que la fonction Python Compile doit traiter comme une chaîne dans le programme lui-même. Mais que se passe-t-il si vous avez un fichier contenant du code que vous voulez exécuter dans votre programme ? Vous pouvez également mettre en œuvre Python Compile à cette fin.

Supposons que vous ayez un fichier nommé testcode.py qui contient un code exécutable Python et que vous vouliez maintenant l’exécuter dans votre programme :

tmpFile = open('testcode.py', 'r')
tmpCode = tmpFile.read()
tmpFile.close()
codeObject = compile(tmpCode, 'testcode.py', 'exec')
exec(codeObject)
python

Tout d’abord, vous devez lire le code que vous voulez exécuter à partir du fichier dans lequel il se trouve actuellement. Pour ce faire, ouvrez le fichier avec la fonction open en Python et un accès en lecture seule. Vous pouvez alors utiliser Python Read pour lire le code source dans votre variable appelée tmpCode et fermer le fichier initialement ouvert.

Le code passe à l’appel de Python Compile maintenant. À ce stade, il est important de spécifier la provenance du code que vous voulez compiler – dans ce cas, à partir du fichier testcode.py. Notre programme ressemble ensuite aux exemples précédents, et vous exécutez finalement le code de testcode.py dans votre programme avec l’appel final d’exec.