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

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

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

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

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

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

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

相关搜索:为什么像箭头函数这样的方法可以在react类中工作,而不能在普通类中工作?为什么`eval`不能在Python类函数中工作?为什么这个合并排序代码可以在python中工作,而不能在javascript中工作?为什么getCurrentInterruptionFilter BroadcastReceiver可以在快速设置中工作,而不能在设置中工作?为什么我的代码可以在pycharm中工作,但不能在visual studio代码中工作?为什么这可以在for循环中工作,而不能在forEach中工作?(数组不是构造函数错误)为什么我的scanf不能在函数中工作?为什么hangfire仪表板可以在开发中工作,而不能在部署中工作为什么我的导入可以在pycharm中工作,而不能在命令行中工作?为什么Protobuf的fromJson()函数在Dart中不工作为什么我在Apify中的infiniteScroll函数不工作?为什么我的回调函数不能在嵌套函数中工作?类中的函数在被调用时不工作(python)为什么clojure函数在core.cljs [试剂]中不工作或崩溃?Javascript函数可以在JSFiddle上工作,但不能在我的HTML文档中工作?php array_filter可以在函数中工作,但不能作为方法在类中工作。为什么其中的onTap和函数不能在InkWell中工作?为什么我的map函数不能在数组中工作?为什么我的javascript函数不能在整个页面中工作为什么这个查询可以在mongo shell中工作,而不能在node mongo驱动程序中工作?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券