시나리오는 내 사용자가 평가를 위해 표현식 문자열을 제공 할 수 있다는 것입니다. 다음과 같을 수 있습니다 :python eval expression에서 변수를 게으르게 평가하는 방법
"power=(x**2+y**2)**0.5"
그런 다음 레이블이있는 입력 스트림이 있습니다. 예컨대 :
x ; y ; z
1 ; 2 ; 3
1 ; 3 ; 4
그리고 출력합니다 같은 데이터 스트림 :
x ; y ; z ; power
3 ; 4 ; 3 ; 5.0
6 ; 8 ; 4 ; 10.0
그러나 나는 또한 사용자에게 예를 들어, 같은 사용보다 "비싼"변수를 사용할 수있는 가능성을 줄 것이다 '합'
"mysum = sum + 5"
하지만
그래서 어떻게 가장 게으른 식의 변수를 평가 할 필요하지 않는 한 '합'을 계산하고 싶지 않아? 성능은 중요하지만 지나치게 중요하지는 않습니다. How do I detect variables in a python eval expression -명확하고 이해할 수있는 코드는 내가 전에 질문을 시도
가장 중요하다. 하지만 분명히 매우 간결하지 않다.
현재 eval과 namespace를 사용 중이다. 다른 방법도 환영합니다.
더 나은 성능을 제공 할 수있는 또 다른 방법은 사전 계산 된 변수가 필요한지 미리 알기 위해 사용자 식의 모든 포함 된 변수를 검색하는 것입니다. 이 그것은 수
앙드레 라즐로에 의해 게시
import ast
def varsInExpression(expr):
st = ast.parse(expr)
return set(node.id for node in ast.walk(st) if type(node) is ast.Name)
:
이에 대한 좋은 답변은 또한 링크 된 질문을 게시
이것은 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)입니다. 마지막 질문을했을 때 XY 문제였습니다. Y에 대해 말하기를 멈추고 X에 대해 이야기하기 전까지는 좋은 대답을 얻지 못할 것이므로 가까운 투표를 계속하게 될 것입니다. –
인터프리터 작성. 여기에는 입력 문자열을 표현식을 나타내는 추상 구문 트리로 구문 분석 한 다음 해당 값에 바인딩되는 변수의 컨텍스트에서 AST를 평가하는 함수를 작성합니다. –