Python3 exec 函数
描述
exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec 可以执行更复杂的 Python 代码。
语法
以下是 exec 的语法:
exec(object[, globals[, locals]])
参数
- object:必选参数,表示需要被指定的 Python 代码。它必须是字符串或 code 对象。如果 object 是一个字符串,该字符串会先被解析为一组 Python 语句,然后再执行(除非发生语法错误)。如果 object 是一个 code 对象,那么它只是被简单的执行。
- globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
- locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与 globals 相同的值。
返回值
exec 返回值永远为 None。
实例
以下展示了使用 exec 的实例:
实例 1
>>>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
实例 2
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
exec 返回值
在 Python 中,exec 函数用于执行字符串中的代码,但它不返回任何值,如果要获取执行代码后的返回值,可以使用 eval 函数或 exec 结合 locals() 或 globals() 来获取变量的值。
请注意,使用 eval 和 exec 需要小心,尤其是当执行的代码来自不受信任的源时,可能存在安全风险。
使用 eval 获取返回值:
实例
code = '2 + 2'
result = eval(code)
print(result)
result = eval(code)
print(result)
在这个例子中,eval 执行字符串 '2 + 2' 并返回结果 4。
以上代码执行输出结果为:
4
使用 exec 结合 locals() 获取返回值:
实例
code = 'result = 2 + 2'
local_vars = {}
exec(code, globals(), local_vars)
result = local_vars['result']
print(result)
local_vars = {}
exec(code, globals(), local_vars)
result = local_vars['result']
print(result)
在这个例子中,exec 执行字符串 'result = 2 + 2',并将结果存储在 local_vars 字典中的 'result' 键中。
以上代码执行输出结果为:
4
使用 exec 结合 globals() 获取返回值:
实例
code = 'result = 2 + 2'
global_vars = {}
exec(code, global_vars)
result = global_vars['result']
print(result)
global_vars = {}
exec(code, global_vars)
result = global_vars['result']
print(result)
在这个例子中,exec 执行字符串 'result = 2 + 2',并将结果存储在 global_vars 字典中的 'result' 键中。
以上代码执行输出结果为:
4