La fonction eval() en Python

Hiten Kanwar 3 janvier 2023
La fonction eval() en Python

Python est un langage de programmation interprété de haut niveau. Il a une structure de code propre et une lisibilité avec son indentation significative notable.

La fonction eval() analyse l’argument de l’expression et l’évalue ensuite comme une expression python.

La syntaxe de la fonction eval() est fournie ci-dessous.

eval(expression, [globals[, locals]])

La valeur de retour sera basée sur et sera le résultat de l’expression évaluée.

Nous évaluons une addition simple dans l’exemple ci-dessous.

x = 2
eval("x+5")

Production:

7

Les arguments de la fonction eval() sont une chaîne et des arguments optionnels de globals et locals. Si globals sont fournis, il doit s’agir d’un dictionnaire. Les locals peuvent être n’importe quel objet cartographique.

Supposons que le dictionnaire globals soit fourni et que la valeur de la clé ne soit pas fournie avec cela. Une référence est générée au dictionnaire du module intégré builtins, et insérée sous la section clé avant que l’expression ne commence à analyser.

Cela suggère à peu près que l’expression a généralement un accès complet au module builtins standard. Si l’objet locals n’est pas fourni, il revient par défaut au dictionnaire global. De plus, dans un scénario où les deux dictionnaires sont omis, l’expression s’exécute avec les globals et locals dans l’environnement où la fonction eval() est appelée.

Certaines fonctions présentes à l’intérieur du module builtins peuvent probablement endommager considérablement le système. Mais il est certainement possible de bloquer tout élément suspect.

Par exemple, considérons un exemple pour créer une liste représentant le nombre de cœurs disponibles à l’intérieur du système.

from os import cpu_count

eval("[1, cpu_count()]")

Production:

[1, 8]
Noter
Étant donné que cette fonction évalue chaque chaîne en tant que code, il faut être très prudent lors de son utilisation. Quelqu’un peut l’utiliser pour exécuter du code sur l’ordinateur comme une faille de sécurité. Par exemple, le eval(input()) demandera à l’utilisateur de saisir la chaîne et de l’exécuter en tant que code. Si le module os est importé, on peut effectuer toutes sortes d’actions sur l’appareil, comme la suppression de fichiers et la falsification du système.