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() 执行。
