这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
首先我想说明一下,exec是一个比较偏门的函数,在绝大多数的情况下,你并不会使用这个函数。而且使用它时,还会影响代码的可读性,使简单的代码变得不易明白。但在一定的情况下,它可以解决一些你很难解决的问题。 exec() 函数的作用很好描述,就是执行以string类型存储的Python代码。
以下是 exec 的语法:
exec(object[, globals[, locals]])
参数说明
- object:必选参数,表示需要被指定的 Python 代码。它必须是字符串或 code 对象。如果 object 是一个字符串,该字符串会先被解析为一组 Python 语句,然后再执行(除非发生语法错误)。如果 object 是一个 code 对象,那么它只是被简单的执行。
- globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
- locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与 globals 相同的值。
返回值
exec 返回值永远为 None。
样例
代码:
a = "e = 1"
exec(a)
print(e)
结果:
1
既然只是执行代码python代码,那为何不直接写在文件中执行呢? 假设现在有这么一个场景,你需要引入外部的工具包,你可能需要从两个包中引入工具小包(当然这个假设本来就很扯,但却可以说明一下exec() 函数 的作用),这两个包你只需要一种,但却需要根据实际情况动态变化。当然你可以将两个包同时引入来解决这个问题,但这样会将你实际不需要的资源加载进来,会产生浪费。这时你就需要 exec() 函数 来完成包的动态加载了。
a = 1
if a == 1:
e = "math"
else:
e = "time"
exec("import " + e)
这样就好了,动态加载的包会减少资源的浪费。但同时,就像开始时说的那样,代码的可读性降低了。
这只是我的浅显理解,如果有问题,欢迎大家一起来进行交流学习。
青冥有晓月