2014-02-19 4 views
0

간부 (표현, 전역 = 없음, 현지인 = 없음) :파이썬 - 파이썬 표준 라이브러리의 예로서 같이 내가 평가의 기본적인 사용을 이해

x = 1 
print(eval('x+1')) 
2 

사람이 더 간결한 설명을 제공시겠습니까 전역 적 (globals)과 지역 (localals) 논쟁을 모두 활용하는 사례가있다.

+3

Exec 또는 eval? ... –

+0

수정 된 질문, 좋은 곳. – Phoenix

+1

일반적으로, 당신이하고있는 일을 절대적으로 알지 못하는 한, 그것을 사용하는 것이 당신의 문제를 해결할 최선의 방법이라는 것을 확신하지 않는 한,'exec' 또는'eval'을 사용하지 마십시오. 'exec'와'eval'은 대개 많은 비용을 들이지 않아야합니다. 사용자 입력에 사용될 때 거의 해결할 수없는 보안 위험 요소이며, 코드를 상당히 느려질 수 있습니다 ('exec'는 현지인을 조작 할 수 있기 때문에 , 그것은 사용되는 범위에서 지역 변수에 대한 최적화를 적극적으로 꺼 놓음), 버그를 찾기 어렵고, 리팩터링에 대한 번거 로움, 가독성을 줄이는 등 등을 포함합니다. – l4mpi

답변

2

전역 로컬 로컬 네임 스페이스를 지정하면 현재 범위 대신 전역, 로컬 변수에 사용됩니다.

>>> x = 1 
>>> d = {'x': 9} 
>>> exec('x += 1; print(x)', d, d) # x => 9 (not 1) 
10 

참고 : 사전 외부의 x은 영향을받지 않습니다.

>>> x 
1 
>>> d['x'] 
10 
2

globalslocals는 표현식을 평가하려고 할 때 변수가 사용할 수 있어야 eval가 작동해야하는 범위, 즉를 정의 할 수 있습니다. 지역 전역 범위에서 x으로, 로컬 버전을 사용하는 것을

>>> eval("x * 2", {'x': 5, 'y': 6}, {'x': 4}) 
8 

참고 : 예를 들면.