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 definedeval() 应用场景
对于 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() 执行。
