본문 바로가기
<개인공부>/[Python]

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

by 사용자 BlockDMask 2020. 10. 22.
반응형

안녕하세요. 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 함수에 대해서 알아보았습니다.

반응형

댓글4

  • Favicon of https://mawile.tistory.com Drakk 2020.10.22 17:12 신고

    와 써봤는데 직접 만든함수에서도 작동하네요??
    답글

  • 2020.10.24 03:18

    비밀댓글입니다
    답글

    • 안녕하세요. 답변이 늦었네요.
      저도 파이썬 지식이 깊진 않아서 좋은 답변은 못드릴것 같아 미리 양해의 말씀드립니다.
      다만 프로그래밍언어는 제가 공부하는 방식은
      기본적으로 문법책 얇은거나 중간거를 한번 정독한 후에 간단한 프로그램을 만들어 보곤합니다. 혹시 무슨 프로그램을 만들어야 할지 감이 안오시면 유튜브에 "파이썬 프로그램" 이라는 키워드로 검색하면 좋은 프로그램 강의들이 있습니다. 그것들을 따라하면서 무슨 라이브러리를 쓰는지 라이브러리를 어떻게 쓰는지 등등을 배우시면서 하는게 좋지 않을까 싶습니다.

      공부만 하다보면 지치게 되거든요. 적절한 결과물이 있어야 흥미가 유지되는것 같습니다.

      Lisa님 새로운 도전 진심으로 응원합니다.

      ps. 문법책만 보기 지겨우시면, 유튜브나 유데미 같은곳에 좋은 문법강의들도 많습니다.

  • 익명 2021.02.09 18:51

    만약에 키워드 두개를 적으려면 어떻게 해야하나요 ㅎㅎ
    답글