在原始代码中,exec()
函数可以执行动态生成的代码字符串。它将字符串作为参数,并在当前的全局命名空间中执行该字符串表示的代码。这意味着在执行exec()
函数时,代码将在当前的命名空间中执行,可以访问和修改全局变量。
然而,在Python3.7中的函数或类中,exec()
函数的行为有所不同。在函数或类中,每个函数或类都有自己的局部命名空间,而不是共享全局命名空间。因此,当在函数或类中使用exec()
函数时,它将在该函数或类的局部命名空间中执行代码,而不是在全局命名空间中执行。
这种行为的改变是为了增加代码的可靠性和安全性。在函数或类中使用exec()
函数可能导致意外的副作用,因为它可以修改局部变量,而这些变量可能在函数或类的其他部分使用。此外,函数或类的局部命名空间是在运行时动态创建的,因此在编写代码时无法预先确定。
如果需要在函数或类中执行动态生成的代码,可以考虑使用eval()
函数。eval()
函数可以计算并执行单个表达式,并返回结果。与exec()
函数不同,eval()
函数只能执行单个表达式,而不能执行多行代码。但是,需要注意的是,使用eval()
函数也可能存在安全风险,因为它可以执行任意的Python表达式。
总结起来,exec()
函数在原始代码中可以工作,因为它在全局命名空间中执行代码。然而,在Python3.7中的函数或类中,exec()
函数无法工作,因为它在函数或类的局部命名空间中执行代码,而不是在全局命名空间中执行。如果需要在函数或类中执行动态生成的代码,可以考虑使用eval()
函数,但需要注意安全性问题。
云+社区技术沙龙[第14期]
T-Day
云+社区技术沙龙[第22期]
serverless days
云+未来峰会
云+社区技术沙龙 [第31期]
DB TALK 技术分享会
DBTalk
云+社区技术沙龙[第19期]
领取专属 10元无门槛券
手把手带您无忧上云