Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 eval() 함수로 문자열을 평가하고 객체를 반환하는 방법

파이썬 eval() 함수로 문자열을 평가하고 객체를 반환하는 방법

파이썬에는 문자열 형태의 코드를 실행할 수 있는 내장 함수 eval()이 있습니다. 이 함수는 반드시 하나의 문자열 인수를 받아야 하며, 파이썬 인터프리터는 전달받은 문자열을 유효한 파이썬 표현식으로 취급해 평가한 후, 그 결과로 생성된 객체와 해당 객체의 타입(type)을 반환합니다.

1. 산술 표현식이 담긴 문자열

문자열 안에 산술 연산식을 넣으면 eval() 함수가 이를 계산하여 정수(int) 객체를 반환합니다.

>>> x = eval('2+2')
>>> type(x)
<class 'int'>
>>> x
4

2. 리스트·튜플로 평가되는 문자열

문자열에 tuple()이나 list() 같은 생성자 호출을 포함하면, 평가 결과로 튜플(tuple) 또는 리스트(list) 객체가 반환됩니다.

>>> x = eval('tuple([1,2,3])')
>>> x
(1, 2, 3)
>>> type(x)
<class 'tuple'>

3. 반복 표현식이 담긴 문자열

제너레이터 표현식처럼 반복 로직이 포함된 문자열도 평가할 수 있습니다. 아래 예제에서는 range(5)의 각 요소에 2를 곱한 값으로 새로운 리스트를 만들어 반환합니다.

>>> x = eval('list((a*2 for a in range(5)))')
>>> x
[0, 2, 4, 6, 8]
>>> type(x)
<class 'list'>

사용 시 주의 사항

eval()은 문자열에 담긴 임의의 파이썬 코드를 그대로 실행하므로, 사용자 입력처럼 신뢰할 수 없는 외부 소스에서 온 문자열을 평가하면 심각한 보안 취약점이 발생할 수 있습니다. 따라서 실무에서는 꼭 필요한 경우에만 제한적으로 사용하는 것이 좋습니다.