2012-04-12 6 views
-2
を定義しません

可能性の重複:
declaring a global dynamic variable in pythonExecの文は正しく名前

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

を呼び出す

が正常に動作しますが、できるだけ早くそれが機能に詰めていますように、もはや動作していないようです。あなたが幹部を使用している理由は、私はまだ理解していない

答えて

0

execがグローバルを無視するように見えますが、ドキュメントは少し曖昧です。これは動作します:

>>> def f(): 
...   global cat 
...   exec 'global cat; cat'+'="meow"' 
... 
>>> 
>>> f() 
>>> cat 
'meow' 
+2

それはまだ非常に悪い考えです! –

+2

'global_and_I_really_understand_why_global_is_almost_always_bad'で' global'キーワードを置き換える際に、PEPを書き留めてしまいました。 (おそらく、 'exec'のための同様のPEP) – geoffspear

+0

そして、最初の'グローバル猫 'は完全に不要です。 'exec'の中のものだけがその名前が使われている範囲にあります。 – geoffspear

3

、その悪い設計上の選択と選択肢は、通常は簡単で、例えば代わり​​にあなたは、単に今ISNをこの

ns = {} 

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

print ns 

を行うことができ、他の、グローバルと何かのそのクリーナー?

+0

申し訳ありませんが、これは私がやろうとしているものにも近いです。辞書キーではなくグローバル変数を定義したい。 – Axim

+0

なぜ!なぜグローバル変数を定義したいのですか? –

+0

さらに重要なのは、グローバル辞書では何ができないのですか? – delnan

関連する問題