PYTHON

[PYTHON] 문자열을 식으로 계산해주는 함수 - eval

_알파카 2024. 2. 8. 02:10
728x90

파이썬의 새로운 내장함수를 알게되어 글로 남깁니다. 

 

eval( )

파이썬의 eval 함수는 매개변수로 받은 식(문자열)을 받아서 계산식으로 실행하는 함수이다. 

예를 들어 

"100+200"

과 같은 문자열이 있을 때, 연산자들을 if문을 활용해서 표현할 수 있지만, 

eval( ) 함수를 사용하면 손쉽게 계산할 수 있다. 

 

식은 하나 이상의 값으로 표현될 수 있는 코드를 말한다. 

 

a > b 도 식이고

1 + 2 도 식이고

1 그 자체도 식이 된다. 

 

eval( ) 함수 예시

eval( ) 함수의 에시를 보자면.

print(eval("100+200")
# 300


print(eval("abs(-8)"))
# 8

 

위와같이 식을 매개변수로 전달하면, 그 계산결과가 답으로 나오게된다. 

이러한 eval 함수는 input 함수로 식을 입력받았을 때 활용할 수 있다!

 

더 다양한 예시를 보자.

# 1. 문자열 덧셈
print(eval('"abc" + "def"'))
# abcdef

# 2. 숫자 덧셈
print(eval("100 + 32"))
# 132

# 3. 내장 함수 
print(eval("abs(-56)"))
# 56

# 4. 리스트 길이
print(eval("len([1,2,3,4])"))
# 4

# 5. round 함수
print(eval("round(1.5)"))
# 2

 

코딩 테스트의 문제 중에서도 이 함수를 사용하면 좋은 문제가 있어 첨부한다. 

2024.02.08 - [코딩테스트/PYTHON] - [프로그래머스][PYTHON] Lv. 0 문자열이 몇 번 등장하는지 세기

 

[프로그래머스][PYTHON] Lv. 0 문자열이 몇 번 등장하는지 세기

문제설명 https://school.programmers.co.kr/learn/courses/30/lessons/181865 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합

yeonnys.tistory.com

 

eval( ) 함수 주의점

그러나 eval( ) 함수는 위험함도 존재한다. 

사용자가 입력한 문자열을 그대로 실행시켜주기 때문에, 

파이썬의 동작을 사용자의 입력이 결정할 수 있다. 

예를 들어, 

exp = "__import__('os').system('ls -altr')"
result = eval(exp)

print(result)

 

이 문자열을 실행하면, 파이썬 스크립트가 실행되는 환경에서 ls -altr을 실행한 결과가 리턴된다. 

이렇게되면 악성코드를 다운로드하여 실행시키는 것도 가능하므로..

편리하지만 위험한 함수인 eval( ) 함수는 여러 사용자들이 사용하는 프로그램에 사용하지 않는 것이 좋다. 

 

 

728x90