Python eval() 函数

Python eval() 语法

eval() 是 Python 的一个内置函数,它用于将一个字符串作为 Python 表达式执行,并返回执行结果。

语法:

eval(expression, globals=None, locals=None)

说明:

eval() 函数接收以下 3 个参数。

  • expression(必选):是一个字符串,它会转换为一个 Python 表达式并执行。
  • globals(可选,默认值:None):是一个字典,用于指定全局命名空间。
  • locals(可选,默认值:None):是一个字典,用于指定本地命名空间。

如果 globals 和 locals 这 2 个参数省略,则 eval() 函数是在 “当前作用域” 中执行表达式。

注意:

  • 在使用 eval() 函数时,应确保表达式是有效合法的,否则会报错。
  • eval() 函数虽然功能强大,但也存在严重的安全风险。当 expression 来自不可信的外部输入时,恶意用户可以注入并执行任意有害的代码。在生产环境中,应谨慎使用 eval()。

Python eval() 摘要

使用频率
官方文档 查看

Python eval() 示例

接下来,我们通过几个简单的例子来讲解一下 Python eval() 函数是如何使用的。

示例 1:eval() 基本用法

s = '1 + 2'
print(eval(s))

运行结果如下。

3

分析:

s 是一个字符串,如果执行 print(s),只会把该字符串直接输出。但是 eval() 函数却可以把它转换为一个 Python 表达式:1 + 2,然后再去执行该表达式。

示例 2:eval() 的更多使用

a = 1
s = 'a + 2'
print(eval(s))

运行结果如下。

3

分析:

需要注意的是,并不是所有字符串都能被 eval() 函数执行,只有 “表达式” 类型的字符串才可以。比如执行 print(eval('绿叶网')),则会直接报错(如下所示)。

(报错)NameError: name '绿叶网' is not defined

eval() 应用场景

对于 eval() 函数来说,它可以轻松实现将 “字符串” 转换为 “列表元组字典 等”。

示例 3:eval() 将字符串转为列表

s = '[1, 2, 3]'
print(type(s))

result = eval(s)
print(result)
print(type(result))

运行结果如下。

<class 'str'>
[1, 2, 3]
<class 'list'>

示例 4:eval() 将字符串转为元组

s = '(1, 2, 3)'
print(type(s))

result = eval(s)
print(result)
print(type(result))

运行结果如下。

<class 'str'>
(1, 2, 3)
<class 'tuple'>

示例 5:eval() 将字符串转为字典

s = "{'one': 1, 'two': 2, 'three': 3}"
print(type(s))

result = eval(s)
print(result)
print(type(result))

运行结果如下。

<class 'str'>
{'one': 1, 'two': 2, 'three': 3}
<class 'dict'>

eval()、exec() 与 compile()

在 Python 中,字符串类型代码的执行函数有 3 个:eval()、exec()、compile(),它们之间的区别如下。

  • eval():用于计算并返回一个字符串表达式的值,它不能执行赋值、导入等代码语句。
  • exec():用于动态执行一段完整的 Python 代码语句(可以是单条或多条语句),但不返回结果。
  • compile():将字符串编译成字节代码,返回一个代码对象。该代码对象能通过 eval() 或 exec() 执行。

上一篇: dir()

下一篇: exec()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号