eval()을 사용해보자
후위표현식 AB+를 A+B로 변환해서 산술연산하는 함수를 만들자.def postfix_eval(expr): operand_stack = [] token_list = postfix_expr.split() for token in token_list: if token in '0123456789': operand_stack.append(int(token)) else: operand2 = operand_stack.pop() operand1 = operand_stack.pop() result = do_math(token, operand1, operand2) operand_stack.append(result) return operand_stack.pop() def do_math(op, op1, op2): if op == "*": return op1 * op2 elif op == "/": return op1 / op2 elif op == '+': return op1 + op2 else: return op1 - op2실행
print(postfix_eval('7 8 + 3 2 + /'))여기서 주목할 것은 do_math
여기 do_math의 내용을 이렇게 바꾼다면
def post_math(op, op1, op2): return eval(op1 + op + op2)테스트를 해보자.
post_math('+', '1', '2') 3문자열을 그대로 맘대로 합쳐서 그 문자열 자체를 평가
이런 것에 대한 엄청난 효과를 볼 수 있는 것은 리스프 형태일 것 같다.
다음엔 python 리스트 형태 언어인 hy로도 조금씩 적어봐야겠다.
댓글 없음:
댓글 쓰기