首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python - eval 和 exec 函数

Python - eval 和 exec 函数

作者头像
为为为什么
发布2022-08-04 15:44:34
发布2022-08-04 15:44:34
96500
代码可运行
举报
文章被收录于专栏:又见苍岚又见苍岚
运行总次数:0
代码可运行

Python 支持通过 eval 函数执行字符串命令,本文记录相关内容。

eval

  • eval() 函数用来执行一个字符串表达式,并返回表达式的值。
语法
  • 以下是 eval() 方法的语法:
代码语言:javascript
代码运行次数:0
运行
复制
eval(expression[, globals[, locals]])

参数
  • expression – 表达式。
  • globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
  • locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
示例
代码语言:javascript
代码运行次数:0
运行
复制
a="[1,2,3,4,5]"
b=eval(a)

>>>
b = [1, 2, 3, 4, 5]

exec

  • exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码。
语法
代码语言:javascript
代码运行次数:0
运行
复制
exec(object[, globals[, locals]])
参数
  • object:必选参数,表示需要被指定的 Python 代码。它必须是字符串或 code 对象。如果 object 是一个字符串,该字符串会先被解析为一组 Python 语句,然后再执行(除非发生语法错误)。如果 object 是一个 code 对象,那么它只是被简单的执行。
  • globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
  • locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与 globals 相同的值。
返回值

exec 返回值永远为 None。

示例
代码语言:javascript
代码运行次数:0
运行
复制
>>>exec('print("Hello World")')
Hello World
# 单行语句字符串
>>> exec("print ('runoob.com')")
runoob.com
 
#  多行语句字符串
>>> exec ("""for i in range(5):
...     print ("iter time: %d" % i)
... """)
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4
代码语言:javascript
代码运行次数:0
运行
复制
x = 10
expr = """
z = 30
sum = x + y + z
print(sum)
"""
def func():
    y = 20
    exec(expr)
    exec(expr, {'x': 1, 'y': 2})
    exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
    
func()

>>>
60
33
34

区别示例

eval 仅执行表达式,复杂的语句无法执行,但可以使用 exec,以导入模块为例

  • 导入模块时不可以使用 eval 函数 如果我执行import vfs_tests as v,它就会起作用。但是,使用eval()的同一导入(如eval(‘import vfs_tests as v’))会引发语法错误。
  • eval只适用于表达式,import是一种语句,可以使用 exec 语句
代码语言:javascript
代码运行次数:0
运行
复制

exec('import vfs_tests as v')
代码语言:javascript
代码运行次数:0
运行
复制

> 额外地,对于导入模块也可以使用 importlib 模块:
>
> ```python
> import importlib
> mod = importlib.import_module('vfs_tests')

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月6日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • eval
    • 语法
    • 参数
    • 示例
  • exec
    • 语法
    • 参数
    • 返回值
    • 示例
  • 区别示例
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档