来源:python中国网 时间:2020-03-15

  exec()函数和eval()函数功能上有些类似,但是exec()比eval()要强大一些,除了执行表达式之外还能执行更复杂的语句,但是exec 返回值永远为 None(也就是没有返回值)。

  exec(object[, globals[, locals]])

  object:必选参数,表示需要被指定的Python代码。它必须是字符串或code对象。如果object是一个字符串,该字符串会先被解析为一组Python语句,然后在执行(除非发生语法错误)。如果object是一个code对象,那么它直接被执行。

  globals:可选参数,管控一个全局的命名空间,即 object可以使用全局命名空间中的函数。如果只是提供了 globals 参数,而没有提供自定义的 __builtins__,则系统会将当前环境中的 __builtins__ 复制到自己提供的 globals 中,然后才会进行计算;如果连globals 这个参数都没有被提供,则使用 Python 的全局命名空间。

  locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值,当它和 globals 中有重复或冲突时,以 locals 的为准。

  globals和locals参数略微复杂,后面用专题说明,先看看必选参数object,如下案例:

 # -*- coding: utf-8 -*-

# 执行赋值语句
a = 0
exec('a=100')
print(a)

# 执行循环语句
exec("""for i in range(3):
            print(i)""")

# None
res = exec('2+3')
print(res)


100
0
1
2
None