在 Python 中,这可行:
exec('x = 1; y = 2')
所以你成功创建了x和y:
>>> x,y
(1,2)
但这不起作用:
def DoIt():
exec('x = 1; y = 2')
return x,y
>>> DoIt()
...
NameError: name 'x' is not defined
为什么呢?任何解决方案?
=============================================== =
修改 非常奇怪和意外: 以上适用于Python 2.7
查看https://repl.it/languages/python
无论如何,我使用的是Python 3.5 64Bit,它根本不起作用! Python 2.7不适合我。
这篇文章要求深入了解经验丰富的Pythonist 。
亲爱的新人,首先,非常欢迎Stackoverflow!而你甚至没有注意到问题的全部内容就开始了你的旅程!你可以做得更好,耐心等待。留下评论,没关系,建议。
顺便说一下,对我来说最重要的是我的问题的答案。
[注]
这不是另一个问题的重复。我不得不与Python 2.7做生意,看看有什么区别。在评论和之前(现已删除)的答案后,这里发现了这种奇怪的行为。
因此,当发生类似这样的事情时,如果在以前版本的Python中以不同的方式运行,则不会检查代码。你没有。所以关于这方面的建议是无关紧要的。
答案 0 :(得分:3)
在Python 2中,exec
是一个内置语句,它将变量泄露到周围的范围内。这个范围泄漏在Python 3中得到了修复,其中exec()
现在是一个与任何其他函数一样的沼泽标准库函数。 You cannot create or modify local variables of the surrounding function scope within exec()
确实在模块范围内工作,正如您所发现的那样。文档很清楚,它只适用于函数本地范围。
你可以做什么,是通过你自己的本地变量字典:
def do_it():
vars = {}
exec('x = 1; y = 2', vars)
return (vars['x'], vars['y'])