【问题标题】:Python 3 - exec() Vs eval() - Expression evaluation [duplicate]Python 3 - exec() Vs eval() - 表达式评估 [重复]
【发布时间】:2017-11-26 00:26:16
【问题描述】:

看完query.

下面的python代码还是不清楚,

>>> exec('print(5+10)')
15
>>> eval('print(5+10)')
15

bash世界,

exec 用给定的命令替换 shell。

eval 将参数作为 shell 命令执行。


问题:

表达式是计算出一个值的计算

要在 python 中评估任何 表达式(在我的情况下,print(5+10) 来自上面的 python 代码),eval()exec() 的工作方式有何不同?

【问题讨论】:

    标签: python


    【解决方案1】:

    eval() 与 exec() 的工作方式有何不同?

    在你的两种情况下,eval()exec() ,做同样的事情。他们打印表达式的结果。但是,它们仍然是不同的。

    eval() 函数只能执行 Python 表达式,而 exec() 函数可以执行任何有效的 Python 代码。这可以从几个例子中看出:

    >>> eval('1 + 2')
    3
    >>> exec('1 + 2')
    >>> 
    >>> eval('for i in range(1, 11): print(i)')
    Traceback (most recent call last):
      File "<pyshell#45>", line 1, in <module>
        eval('for i in range(1, 11): print(i)')
      File "<string>", line 1
        for i in range(1, 11): print(i)
          ^
    SyntaxError: invalid syntax
    >>> exec('for i in range(1, 11): print(i)')
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> 
    

    【讨论】:

    • 请注意,在 OP 的情况下,它们都打印 15,因为 print 函数在评估时都会打印。
    • 那么,当exec() 接受任何有效的python 代码时,我为什么要使用eval()?其中表达式是其中的一部分。我不是在问exec() 是否接受任何 python 代码。
    • @overexchange 你真的不应该使用 either 函数,因为它们都很危险。您可以让eval() 的用处略微降低,因为它仅限于表达式,但您通常应避免同时使用这两种方法,而应使用替代方法。
    • @overexchange 看答案中的例子。如果您使用exec(),则不会将结果作为值。 exec('1 + 2') 执行加法,但无法从中获取结果。你必须这样做exec('somevar = 1 + 2')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多