首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么within exec()函数可以在原始代码中工作,而不能在Python3.7中的函数或类中工作?

在原始代码中,exec()函数可以执行动态生成的代码字符串。它将字符串作为参数,并在当前的全局命名空间中执行该字符串表示的代码。这意味着在执行exec()函数时,代码将在当前的命名空间中执行,可以访问和修改全局变量。

然而,在Python3.7中的函数或类中,exec()函数的行为有所不同。在函数或类中,每个函数或类都有自己的局部命名空间,而不是共享全局命名空间。因此,当在函数或类中使用exec()函数时,它将在该函数或类的局部命名空间中执行代码,而不是在全局命名空间中执行。

这种行为的改变是为了增加代码的可靠性和安全性。在函数或类中使用exec()函数可能导致意外的副作用,因为它可以修改局部变量,而这些变量可能在函数或类的其他部分使用。此外,函数或类的局部命名空间是在运行时动态创建的,因此在编写代码时无法预先确定。

如果需要在函数或类中执行动态生成的代码,可以考虑使用eval()函数。eval()函数可以计算并执行单个表达式,并返回结果。与exec()函数不同,eval()函数只能执行单个表达式,而不能执行多行代码。但是,需要注意的是,使用eval()函数也可能存在安全风险,因为它可以执行任意的Python表达式。

总结起来,exec()函数在原始代码中可以工作,因为它在全局命名空间中执行代码。然而,在Python3.7中的函数或类中,exec()函数无法工作,因为它在函数或类的局部命名空间中执行代码,而不是在全局命名空间中执行。如果需要在函数或类中执行动态生成的代码,可以考虑使用eval()函数,但需要注意安全性问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

4分40秒

【技术创作101训练营】Excel必学技能-VLOOKUP函数的使用

16分8秒

人工智能新途-用路由器集群模仿神经元集群

1分23秒

如何平衡DC电源模块的体积和功率?

领券