Pour exécuter di­rec­te­ment des lignes de code in­di­vi­duelles 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.

Ap­pli­ca­tions possibles

Si vous ne voulez pas exécuter des ins­truc­tions de code in­di­vi­duelles di­rec­te­ment 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 pro­gram­ma­tion efficace pour votre projet Web ? Deploy Now de IONOS peut vous aider à renforcer votre ef­fi­ca­cité en déployant vos sites Web à tout moment via GitHub. L’aperçu en temps réel vous permet de vi­sua­li­ser 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 pa­ra­mètres dif­fé­rents, mais seuls les trois premiers pa­ra­mètres sont obli­ga­toires. Les autres pa­ra­mètres de la fonction sont fa­cul­ta­tifs et peuvent être définis selon vos besoins pour spécifier le com­por­te­ment 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 pa­ra­mètres in­di­vi­duels.

Paramètre Fa­cul­ta­tif Des­crip­tion
source non Vous passez ici ce que vous voulez compiler. Il s’agit prin­ci­pa­le­ment de chaînes, mais vous pouvez également trans­mettre 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 dif­fé­rentes ex­pres­sions sont évaluées avec eval.
  • exec : les blocs de code sont évalués avec exec.
  • simple : vous utilisez single pour les dé­cla­ra­tions in­di­vi­duelles in­te­rac­tives.
flags oui Vous pouvez spécifier ici comment la source doit être compilée pré­ci­sé­ment. Toutefois, vous pouvez ignorer ce flag pour la grande majorité des cas d’uti­li­sa­tion.
dont_inherit oui Tout comme flag, le paramètre dont_inherit sert à spécifier la com­pi­la­tion de votre source.
optimize oui Le paramètre optimize vous permet de dé­ter­mi­ner le niveau d’op­ti­mi­sa­tion de votre processus de com­pi­la­tion.

Ap­pli­ca­tion de Python Compile

On peut s’appuyer sur un exemple de code pour illustrer le fonc­tion­ne­ment 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é­fi­nis­sez la variable nommée co­deAsS­tring, 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 co­deAsS­tring, car il s’agit ici du caractère de contrôle qui marque un saut de ligne. Vous voyez ainsi que vous pouvez sim­ple­ment 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 uni­que­ment in­ter­prété comme une simple chaîne. L’appel de la fonction Compile dans l’exemple ci-dessus utilise uni­que­ment les pa­ra­mè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 di­rec­te­ment 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 co­deAsS­tring est un bloc de code entier, comme le montre la ré­so­lu­tion 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 guil­le­mets.

Le résultat de la fonction Python Compile est affecté à la variable nommée co­deOb­ject dans l’exemple de code ci-dessus. Il contient main­te­nant pré­ci­sé­ment ce que son nom suggère : un objet code. L’aspect par­ti­cu­lier d’un objet code est que vous pouvez l’exécuter à tout moment avec un appel de la fonction exec en Python. C’est exac­te­ment 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 ins­truc­tion

Si vous ne voulez compiler qu’une seule ins­truc­tion 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 ins­truc­tions in­di­vi­duelles. 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. Con­trai­re­ment à l’exemple précédent, la chaîne ne contient qu’une seule ins­truc­tion Python print. Cela nécessite l’uti­li­sa­tion du mode eval, qui est invoqué pour évaluer des ins­truc­tions in­di­vi­duelles.

Main­te­nant, si vous exécutez à nouveau votre objet code à l’aide de la fonction exec, vous verrez que tout fonc­tionne 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é­cu­table Python et que vous vouliez main­te­nant 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 ac­tuel­le­ment. 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 ini­tia­le­ment ouvert.

Le code passe à l’appel de Python Compile main­te­nant. À ce stade, il est important de spécifier la pro­ve­nance 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 fi­na­le­ment le code de testcode.py dans votre programme avec l’appel final d’exec.

Aller au menu principal