안녕하세요. 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. 문자열 덧셈 a = eval('"BlockDMask" + "blog"') print(f"1. eval('\"BlockDMask\"' + '\" blog\"') : {a}") # 2. 숫자 덧셈 b = eval("100 + 32") print(f'2. eval("100 + 32") : {b}') # 3. 내장 함수 abs c = eval("abs(-56)") print(f'3. eval("abs(-56)") : {c}') # 4. 리스트 길이 d = eval("len([1,2,3,4])") print(f'4. eval("len([1,2,3,4])") : {d}') # 5. round 함수 e = eval("round(1.5)") print(f'5. eval("round(1.5)") : {e}') | cs |
결과창
위 예제에서 확인하셨듯이, 문자열로 식을 입력하면 해당식을 실행한 결과값을 반환해 주는 그런 함수인것을 볼 수 있습니다.
감사합니다. 이상으로 파이썬 eval 함수에 대해서 알아보았습니다.
'<개인공부> > [Python]' 카테고리의 다른 글
[python] 파이썬 클래스1 클래스(class), 객체(object), 생성자, 메서드 (9) | 2020.11.22 |
---|---|
[python] 파이썬 함수 정리와 예제 (def) (5) | 2020.11.08 |
[python] 파이썬 리스트(list) 정리 및 예제 (2탄 응용편) (1) | 2020.10.29 |
[python] 파이썬 리스트(list) 정리 및 예제 (1탄 기본편) (19) | 2020.10.25 |
[python] 파이썬 type, id 함수 정리 및 예제 (3) | 2020.10.16 |
[python] 파이썬 진수 변환 hex, oct, bin (3) | 2020.10.08 |
[python] 파이썬 타입 변환, 형변환 (float, int, str, chr, bool) (0) | 2020.10.04 |
[python] 파이썬 all, any 함수 정리 및 예제 (6) | 2020.10.01 |