577 votes

Quelle est la différence entre eval, exec, et de les compiler en Python?

J'ai été à la recherche à l'évaluation dynamique de code Python, et viennent à travers l' eval() et compile() fonctions, et l' exec déclaration.

Quelqu'un peut-il expliquer la différence entre eval et exec, et comment les différents modes d' compile() ?

217voto

Max Shawabkeh Points 19030
  1. exec n'est pas une expression: une déclaration en Python 2.x, et une fonction en Python 3.x. Il compile et évalue immédiatement une déclaration ou d'un ensemble de déclarations contenues dans une chaîne de caractères. Exemple:

    exec('print(5)')           # prints 5.
    # exec 'print 5'     if you use Python 2.x, nor the exec neither the print is a function there
    exec('print(5)\nprint(6)')  # prints 5{newline}6.
    exec('if True: print(6)')  # prints 6.
    exec('5')                 # does nothing and returns nothing.
    
  2. eval est une fonction intégrée (pas un énoncé), qui évalue une expression et renvoie la valeur de l'expression produit. Exemple:

    x = eval('5')              # x <- 5
    x = eval('%d + 6' % x)     # x <- 11
    x = eval('abs(%d)' % -100) # x <- 100
    x = eval('x = 5')          # INVALID; assignment is not an expression.
    x = eval('if 1: x = 4')    # INVALID; if is a statement, not an expression.
    
  3. compile est d'un niveau inférieur à la version de l' exec et eval. Il ne les exécute pas ou évaluer vos déclarations ou des expressions, mais renvoie un code objet qui peut le faire. Les modes sont comme suit:

    1. compile(string, '', 'eval') retourne le code objet qui aurait été exécuté avait vous fait eval(string). Notez que vous ne peut pas utiliser les déclarations contenues dans ce mode, seule une (unique) l'expression est valide.
    2. compile(string, '', 'exec') retourne le code objet qui aurait été exécuté avait vous fait exec(string). Vous pouvez utiliser n'importe quel nombre de déclarations ici.
    3. compile(string, '', 'single') , c'est comme l' exec , mais il ignore tout, sauf pour le premier énoncé. Note qu'un if/else déclaration de ses résultats est considéré comme une seule instruction.

55voto

Wu Li Points 244

exec est pour instruction et ne retourne rien. eval est pour l'expression et retourne la valeur d'une expression.

l'expression signifie "quelque chose" alors que signifie "faire quelque chose".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X