2012-04-12 3 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"' 

를 호출

잘 작동하지만이 기능에 포장 것 즉시, 더 이상 작동하지 않습니다.

당신은 단순히 지금이

ns = {} 

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

print ns 

을 외설 수있는 대신에 다른 다음 글로벌 무언가의 예를 들면, 그것의 나쁜 디자인 선택과 대안은 일반적으로 쉽게, 간부을 사용하는 이유를 나는 아직도 이해가 안

답변

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

그런데 첫 번째''global cat''은 완전히 불필요합니다; 단지'exec' 안에있는 이름은 그 이름이 사용되는 범위에 있습니다. – geoffspear

3

저거 청소부?

+0

미안하지만, 이것은 내가하고자하는 것에도 미치지 않습니다. 사전 키가 아닌 전역 변수를 정의하고 싶습니다. – Axim

+0

왜! 글로벌 변수를 정의하는 이유는 무엇입니까? –

+0

더 중요한 것은, 글로벌 사전이 할 수없는 것이 무엇이 필요합니까? – delnan

관련 문제