문자열을 python 실행코드로 변환해주는 eval(), exec()

less than 1 minute read

eval()과 exec()함수는 모두 python의 내장함수입니다.

eval()은 표현된 python 식을 받아 파이썬 컴파일 코드로 변환합니다.

반면 exec()은 문자열로 표현된 문을 받아서 파이썬 컴파일 코드로 변환합니다.

a = 2
a = eval('a+2') #단순한 연산식
print(a)
2

exec('b=a+2') # 변수에 수식의 값을 넣는 실행문
print(b)
2

만약 eval에 실행문을 넣으면,
a = 2
eval('b=a+2') 
print(b) syntax에러 발생

b = exec('a+2')
print(b) #리턴된 내용이 없으니 b값에 내용이 없음

한가지 문제를 풀면서 설명드리겠습니다.

hackerrank문제 바로가기

문제는 아래와 같습니다.

입력은 1줄씩 2번에 나눠서 2번 진행됩니다.

결과는 1을 아래 식에 대한 결과가 4이고, 그 값이 첫번째줄에 입력한 값과 같아서 True를 반환합니다.

Sample Input

1 4
x**3 + x**2 + x + 1

Sample Output

True

1. eval()함수 활용

input1, input2 =map(int, input().split()) #input으로 받는 데이터를 정수로 변환하여 각각 저장합니다. 

input3 =input() #다항식(x**3 + x**2 + x + 1)을 스트링으로 전달 받습니다. 

x=input1 #input으로 전달받은 숫자 1을 x변수에 집어 넣습니다. 

value=eval(input3) 
# 단순 문자열이었던 input3의 내용이 실제 python 상의 코드처럼 실행되어 이 값이 value에 저장됩니다.(value에 저장되는 값은 4입니다. ) 

print(value==input2) #value값과 input값이 동일하기 때문에 True가 출력됩니다. 

2.exec()함수 활용

input1, input2 =map(int, input().split())
input3 =input() 
#여기 까지는 똑같습니다. 

s1='''
x=input1
value=eval(input3) 
print(value==input2)
'''
exec(s1)
# 여러 실행문을 하나의 스트링으로 저장해서 한번에 실행할 수 있습니다. 


Leave a comment