<개인공부>/[Python]

[python] 파이썬 eval 함수 정리 및 예제

BlockDMask 2020. 10. 22. 00:30
반응형

안녕하세요. BlockDMask 입니다.
오늘은 조금 색다른 함수인 eval 이라는 함수를 가지고 왔습니다.
이 함수는 간단해서 이해하는데는 문제가 없을 것 입니다.
하지만, 이 함수가 유용한게 맞는지 유용하기만 한지? 에 대해서 한번 이야기를 해보려합니다.

<목차>
1. 파이썬 eval 함수란
2. 파이썬 eval 함수 예제

1. python eval 함수


eval(expression)

eval 함수는 한줄로 정리하자면
매개변수로 받은 expression (=식)을 문자열로 받아서, 실행하는 함수 입니다.
즉, 매개변수로 받은 expression은 파이썬에서 실행 가능한 문자열이 들어와야 한다는것이고, 문자열로 들어온 그 expression을 파이썬이 실행해주는 그런 함수 입니다.

그럼 식(=expression)은 무엇일까요?

공식문서를 보면 딱 정의가 나와있지는 않고 종류에 대해서만 이야기가 나와있는것으로 보입니다.
제 얕은 지식으로 한번 정리를 해보자면,
식은 값, 연산자, 변수 등 파이썬에서 사용하여 무언가를 표현할 수 있는 것을 말합니다.
우리가 앞에서 배웠던 연산자들 <, >, 비교를 하기위해서 배운 키워드 while, for 그리고 값들 1,2,3,4,5, 'a', 'b', 'c'과 다양한 변수들을 가지고 파이썬에서 사용할 수 있는것을 만들면 그게 식이 되는것 입니다.
즉, 하나 이상의 값으로 표현 될 수 있는 코드를 말합니다.

a > b 이런것도 식이고
1 + 2 이런것도 식 입니다.
물론 1 그 자체도 식 입니다.

파이썬의 식에 대해서 더 알고싶다면 공식문서 [바로가기]를 참고해주세요.

그럼 알기 쉽게 eval 함수의 예시를 한번 간단하게 들어보겠습니다.

eval("1+2") 라는 문자열이 매개변수로 들어오면
출력 값으로 3이라는 값을 반환하게 됩니다.

물론 파이썬의 코드가 들어온다는것은 함수도 사용할 수 있다는 것이겠죠?
파이썬에서 절대값을 구해주는 abs 함수를 사용한다고 하면, 이렇게 쓸 수 있을 것입니다.


eval("abs(-8)")
이렇게 문자열로 "abs(-8)" 을 집어넣으면 eval 함수는 문자열 내부에 있는 abs(-8)을 실행해서 8을 반환하게 됩니다.

어떤가요? eval 함수 참 신기하지 않나요?
그러면 우린 input 함수를 이용해서 사용자로부터 원하는 파이썬 함수를 입력 받거나 식을 입력받아서 마음대로 프로그램을 조종할 수 있게 할 수 있습니다. 너무 좋네요.
남이 만든 프로그램에 자유롭게 명령어를 입력할 수 있다니!

그런데 그게 이 eval(expression)함수의 함정 입니다.
사용자가 마음대로 프로그램을 조종할 수 있다. 즉, 프로그램에 명령을 입력할 수 있다. 
결국 그 말은 프로그램을 상처입히거나 해킹을 하거나 할 수 있다는 뜻과 동일하게 됩니다.

이 함수를 실제 릴리즈 하는 프로그램에서 사용한다고 하면 조금 위험하겠죠? 너무 많은 자유를 주는 그런 함수 입니다.


2. python eval 함수 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 파이썬 eval(expression) 예제
 
# 1. 문자열 덧셈
= eval('"BlockDMask" + "blog"')
print(f"1. eval('\"BlockDMask\"' + '\" blog\"') : {a}")
 
# 2. 숫자 덧셈
= eval("100 + 32")
print(f'2. eval("100 + 32") : {b}')
 
# 3. 내장 함수 abs
= eval("abs(-56)")
print(f'3. eval("abs(-56)") : {c}')
 
# 4. 리스트 길이
= eval("len([1,2,3,4])")
print(f'4. eval("len([1,2,3,4])") : {d}')
 
# 5. round 함수
= eval("round(1.5)")
print(f'5. eval("round(1.5)") : {e}')
 
cs

결과창

위 예제에서 확인하셨듯이, 문자열로 식을 입력하면 해당식을 실행한 결과값을 반환해 주는 그런 함수인것을 볼 수 있습니다.


감사합니다. 이상으로 파이썬 eval 함수에 대해서 알아보았습니다.

반응형