2011-04-08 10 views
50

오케이. 그래서 제 질문은 간단합니다 : 어떻게 파이썬에서 eval을 사용하여 변수의 값을 할당 할 수 있습니까? 나는 eval('x = 1')을 시도했지만 작동하지 않습니다. SyntaxError를 반환합니다. 왜이 기능이 작동하지 않습니까?어떻게 파이썬에서 eval을 사용하여 변수의 값을 할당 할 수 있습니까?

+1

무엇을하려하십니까? 당신이 무엇을 하든지 eval을 사용해서는 안됩니다. – babsher

답변

80

x=1은 표현식이 아니기 때문에 표현식이 아닙니다. 명령문을 실행하려면 exec을 사용하십시오.

>>> exec('x=1') 
>>> x 
1 

는 그건 그렇고, 당신이 필요로하는 모든 할당하는 동적 이름, 예를 들어, 경우 exec/eval 사용하지 않도록하는 방법에는 여러 가지가 있습니다 당신이 사전을 사용할 수는 setattr function, 또는 locals() dictionary는 :

>>> locals()['y'] = 1 
>>> y 
1 

업데이트 : 코드는 위의 REPL에서 작동하지만, 그것은 함수 내에서 작동하지 않습니다. exec이 문제가 아닌 경우 일부 방법은 Modifying locals in Python을 참조하십시오.

+6

그리고 btw, 이와 같은 변수를 변경하려면 사전을 대신 사용하는 것이 좋습니다. –

+0

다음번에 이런 식으로 사전을 사용할 것입니다. –

+3

파이썬 문서는'locals()'를 수정해서는 안된다고 말합니다. (http://docs.python.org/2/library/functions.html#locals)'eval()'을 완전히 사용하지 않고 과제를 사용하는 또 다른 방법이 있습니까? –

9

가변 할당은 표현식이 아니기 때문에 수 없습니다. eval은 수식 만 eval입니다. 대신 exec을 사용하십시오.

더 나은 아직, 사용하지 말고 우리가 안전하고 정상적인 해결책을 찾을 수 있도록 시도하십시오.

0
 
x = 0 
def assignNewValueToX(v): 
    global x 
    x = v 

eval('assignNewValueToX(1)') 
print(x) 

그것은 작동합니다 ... 실제로 파이썬은 표현식을 평가할 수 있도록 assignNewValueToX를 실행합니다. 그것은 더 발전 될 수 있지만, 나는 거의 모든 필요를 위해 더 나은 선택이있을 것이라고 확신합니다.

+0

거의,하지만 변수 이름을 동적으로 지정해야합니다. 그래도 고마워. –

관련 문제