Python의 eval() 함수

Hiten Kanwar 2023년1월3일
Python의 eval() 함수

Python은 해석된 고급 프로그래밍 언어입니다. 그것은 눈에 띄는 상당한 들여 쓰기와 함께 깨끗한 코드 구조와 가독성을 가지고 있습니다.

eval() 함수는 표현식 인수를 구문 분석한 다음 이를 파이썬 표현식으로 평가합니다.

eval() 함수의 구문은 아래에 나와 있습니다.

eval(expression, [globals[, locals]])

반환 값은 평가된 식의 결과를 기반으로 합니다.

아래 예에서 간단한 추가를 평가합니다.

x = 2
eval("x+5")

출력:

7

eval() 함수 인수는 globalslocals의 문자열 및 선택적 인수입니다. globals가 제공되는 경우 사전이어야 합니다. locals는 모든 매핑 개체가 될 수 있습니다.

globals 사전이 제공되고 키 값이 제공되지 않는다고 가정합니다. 내장 모듈 builtins의 사전에 대한 참조가 생성되고 표현식이 구문 분석을 시작하기 전에 키 섹션 아래에 삽입됩니다.

이는 표현식이 일반적으로 표준 builtins 모듈에 대한 완전한 액세스 권한을 가지고 있음을 대략적으로 나타냅니다. locals 개체가 제공되지 않으면 기본적으로 전역 사전이 사용됩니다. 또한 두 사전이 모두 생략된 시나리오에서 표현식은 eval() 함수가 호출되는 환경에서 globalslocals로 실행됩니다.

builtins 모듈 내부에는 시스템을 크게 손상시킬 수 있는 특정 기능이 있습니다. 그러나 의심스러운 항목은 모두 차단할 수 있습니다.

예를 들어 시스템 내부에서 사용 가능한 코어 수를 나타내는 목록을 만드는 예를 생각해 보십시오.

from os import cpu_count

eval("[1, cpu_count()]")

출력:

[1, 8]
메모
이 함수는 모든 문자열을 코드로 평가하므로 이를 사용할 때 매우 주의해야 합니다. 누군가 보안 구멍으로 컴퓨터에서 코드를 실행하는 데 사용할 수 있습니다. 예를 들어 eval(input())은 사용자에게 문자열을 입력하고 코드로 실행하도록 요청합니다. os 모듈을 가져오면 파일 삭제 및 시스템 변조와 같은 모든 종류의 작업을 장치에서 수행할 수 있습니다.