当我们需要在 Python 中运行一个字符串形式的代码时,可以使用内置函数 exec
。
语法
exec
函数的语法如下:
exec(object[, globals[, locals]])
其中,object
参数是待执行的代码字符串。可选参数 globals
和 locals
表示代码执行时的全局命名空间和局部命名空间,如果不指定,则使用当前作用域的命名空间。
实例
示例一
下面是一个简单的示例,把一个字符串当成代码执行:
code = """
for i in range(5):
print(i, end=' ')
"""
exec(code)
输出:
0 1 2 3 4
在上述示例中,我们将字符串 "for i in range(5):\n print(i, end=' ')"
赋值给了 code
变量,并将其作为代码字符串传递给 exec
函数。函数执行后,会按照 code
变量中定义的循环代码输出结果。
示例二
下面是另一个示例,该示例使用了 globals
和 locals
参数。
s = "print(x)"
exec(s, {'x': 123})
输出:
123
在上述示例中,我们将字符串 "print(x)"
赋值给了变量 s
,并将 x: 123
作为字典传递给 exec
函数的 globals
参数。此时,在 s
字符串中对 x
的引用会从全局命名空间中查找,而查找的结果就是 123
。因此,执行 exec(s, {'x': 123})
后,会输出 123
。
注意事项
使用 exec
函数时需要注意以下几点:
exec
接收一个字符串作为参数,并以这个字符串作为脚本进行解释执行。exec
函数不会返回任何值,返回值为None
。exec
函数会影响该块的命名空间,可以修改该块数据。- 使用
exec
函数需要谨慎,因为它可以执行任意代码,可能存在安全性问题。