相同点:
eval
和 exec
都能够动态执行 Python 代码字符串。
不同点:
- 返回值
eval
会计算表达式的值并返回结果。exec
执行一系列语句,不返回任何值。
例如:
expression = "2 + 3" result = eval(expression) # result 为 5
而
code = "x = 2 + 3" exec(code) # 没有返回值
- 作用范围
eval
只能在当前作用域内计算表达式,不能修改全局或局部变量。exec
可以修改全局和局部变量。
比如:
def test(): x = 1 expression = "x + 1" result = eval(expression) # 这里的 x 未被修改,仍为 1
但
def test(): x = 1 code = "x += 1" exec(code) # x 被修改为 2
- 输入的代码类型
eval
通常用于计算一个表达式。exec
用于执行一系列语句,包括赋值、控制流等。
总之,eval
更适合用于简单的表达式求值,而 exec
适用于执行更复杂的代码块。在使用时,要注意代码的安全性,避免执行不可信的用户输入。