Python/Basic programming

식 및 코드를 실행시켜주는 eval(), exec() 함수

noodle-dev 2020. 3. 10. 20:43

eval(), exec()

eval()exec() 함수 둘 다 파이썬의 내장 함수이며, 문자열로 표현된 python codes를 실행할 때 사용한다.

eval() 함수

문자열로 표현된 파이썬 을 인수로 받아 파이썬 컴파일 코드로 변환한다.

a = 1
a = eval('a+4')
print(a)    #5

응용하여 여러 줄의 반복되는 코드를 다음과 같이 사용할 수 있다.

*p,q,r=eval("int(input()),"*5)
#input(),input(),input(),input(),input() 결과를 *p, q, r에 넣는다.

이 함수는 매우 강력하면서도 사용을 자제하도록 권고된다.

왜냐하면 해당 표현식을 그대로 실행하는 것이기 때문에 Command Injection Flaws가 그대로 노출될 수 있다. 이는 시스템 명령어를 삽입할 수 있는 언어 모두가 가지고 있는 취약점이기도 하다.

뿐만 아니라, 이 함수는 코드의 가독성을 떨어트리고 디버깅을 어렵게 만들 수 있다.

exec() 함수

문자열로 표현된 을 인수로 받아 파이썬 컴파일 코드로 변환한다.

파이썬 인터프리터가 번역하여 실행할 수 있다.

a = 5
exec('a = a+4')
print(a)    #9