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 문자열이 몇 번 등장하는지 세기
eval( ) 함수 주의점
그러나 eval( ) 함수는 위험함도 존재한다.
사용자가 입력한 문자열을 그대로 실행시켜주기 때문에,
파이썬의 동작을 사용자의 입력이 결정할 수 있다.
예를 들어,
exp = "__import__('os').system('ls -altr')"
result = eval(exp)
print(result)
이 문자열을 실행하면, 파이썬 스크립트가 실행되는 환경에서 ls -altr을 실행한 결과가 리턴된다.
이렇게되면 악성코드를 다운로드하여 실행시키는 것도 가능하므로..
편리하지만 위험한 함수인 eval( ) 함수는 여러 사용자들이 사용하는 프로그램에 사용하지 않는 것이 좋다.
728x90
'PYTHON' 카테고리의 다른 글
[PYTHON] 리스트 중복 제거 & 순서 유지 (0) | 2024.02.13 |
---|---|
[PYTHON] 공백 및 문자 제거 함수 - strip, rstrip, lstrip (1) | 2024.02.08 |
[PYTHON] 뒤에서부터 찾기 - rfind, rindex (0) | 2024.02.06 |
[PYTHON] 리스트 원소 타입 바꾸기 - map (0) | 2024.02.05 |
.ipynb 파일을 .py파일로 변경하기 (0) | 2024.02.04 |