Python exec() 函数

Python exec() 语法

exec() 是 Python 的一个内置函数,它用于执行一个字符串或 code 对象里面的 Python 代码。

eval() 不同,exec() 可以执行包含多条语句的代码块,并且不返回任何值(即隐式返回 None)。

语法:

exec(object, globals=None, locals=None)

说明:

exec() 函数可以接收 3 个参数。

  • object(必选):可以是一个字符串,也可以是一个 code 对象。其中,code 对象是使用 compile() 函数生成的对象。
  • globals(可选,默认值:None):是一个字典,用于指定全局命名空间,默认值为 None。
  • locals(可选,默认值:None):是一个字典,用于指定本地命名空间,默认值为 None。

如果 globals 和 locals 这 2 个参数省略,则 exec() 函数默认在 “当前作用域” 中执行代码。

注意: exec() 函数可以用于执行用户动态输入的代码,这是非常危险的一件事。因为用户能够在你的环境中运行任何代码。因此,在面对用户使用 exec() 函数时要特别小心。

Python exec() 摘要

使用频率
官方文档 查看

Python exec() 示例

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

示例 1:exec() 执行单条语句

code = 'print("绿叶网")'
exec(code)

运行结果如下。

绿叶网

分析:

在这个例子中,code 是一个字符串,它会被 exec() 函数解析成 Python 语句并执行。当然了,字符串也可以是多行代码字符串,请看下面例子。

示例 2:exec() 执行多条语句

code = '''a = 10
b = 20
print('a + b =', a + b)'''

exec(code)

运行结果如下。

a + b = 30

示例 3:exec() 执行 code 对象

src_code = 'print(666)'
exec_code = compile(src_code, 'test', 'exec')
exec(exec_code)

# 查看类型
print(type(exec_code))

运行结果如下。

666
<class 'code'>

分析:

compile() 函数用于将一个字符串编译成字节代码,然后可以由 exec() 函数执行。

示例 4:exec() 使用 globals 参数

from math import *

code = '''result = sqrt(4)
print(result)'''

exec(code, {'sqrt': sqrt})

运行结果如下。

2.0

分析:

exec( code, { 'sqrt': sqrt } ) 表示将 math 模块的 sqrt() 函数传递到 code 里面去,这样 code 里面的代码就能使用到 sqrt() 函数了。如果把 { 'sqrt': sqrt } 去掉,此时执行会直接报错,这是因为 code 里面代码无法识别 sqrt() 是什么。

eval()、exec() 与 compile()

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

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

上一篇: eval()

下一篇: compile()

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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