-2

可能重复:
在python中声明一个全局动态变量

>>> def f():
        global cat
        exec 'cat'+'="meow"'
        return
>>> f()
>>> cat
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    cat
NameError: name 'cat' is not defined

这只是我遇到的问题的一个精简示例。在我的实际脚本中,我需要创建和命名一个类的各种实例,因此需要 exec 语句。

只是打电话

exec 'cat'+'="meow"'

直接在 shell 中工作正常,但是一旦它被打包到一个函数中,它似乎就不再工作了。

4

2 回答 2

3

我仍然不明白你为什么要使用 exec,它是一个糟糕的设计选择,替代方案通常更容易,例如而不是全局,然后你可以简单地这样做

ns = {}

def f():
    ns["cat"] = "miow"

print ns

现在不是更干净了吗?

于 2012-04-12T11:22:09.780 回答
0

看起来 exec 忽略了全局,文档有点模糊。但这有效:

>>> def f():
...         global cat
...         exec 'global cat; cat'+'="meow"'
... 
>>> 
>>> f()
>>> cat
'meow'
于 2012-04-12T11:23:35.840 回答