-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"'

シェルで直接実行しても問題なく動作しますが、関数にパックされるとすぐに動作しなくなります。

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 に答える