Python의 Eval에 대해 알아야 할 모든 것



이 기사는 Python의 Eval에 대한 상세하고 포괄적 인 지식을 제공합니다.

주변을 둘러 보면 필요를 충족하도록 특별히 제작 된 응용 프로그램을 찾을 수 있습니다. 이러한 응용 프로그램을 개발하는 데 사용할 수있는 프로그래밍 언어가 많이 있지만 대부분은 . Python은 뛰어난 기능과 ​​향상된 다재다능 함과 함께 항상 강력하고 매우 유용한 고유 한 제품을 제공합니다. 이 Eval in Python 기사에서는 다음 사항에 대해 설명합니다.

Python에서 Eval이란 무엇입니까?

Python의 eval 함수는 가장 흥미로운 옵션 중 하나입니다. 일부는이를 해킹이라고 부르고 일부는 바로 가기라고 부르지 만 어느 쪽이든 Python 코드 내에서 Python 프로그램을 실행하는 데 사용할 수 있습니다. 꽤 멋지죠?





eval 함수를 사용할 때 기본적으로 인터프리터에게 eval 함수의 대괄호 안에있는 실행을 촉구합니다.

PythonLogo- Python에서의 평가Python에서 eval 함수를 사용하는 구문은 다음과 같습니다.



eval (표현식, 전역 = 없음, 지역 = 없음)

위의 구문에서

  1. 표현: 파이썬 프로그램 자체 내에서 파이썬 표현식으로 구문 분석되고 평가되는 문자열 또는 코드 조각입니다.



  2. 글로벌 : 위에서 언급 한 표현식을 실행하는 데 사용할 수있는 모든 전역 메서드를 정의하는 데 사용되는 사전입니다. 이것은 선택적 엔티티이며 용도는 필요에 따라 다릅니다.

  3. 지역 주민 : 전역과 유사하게 사용 가능한 로컬 메서드와 변수를 지정하는 데 사용되는 또 다른 사전입니다.

이 기능의 사용을 더 잘 이해하려면 아래 예를 살펴보십시오.

from math import * def secret_function () : return 'Secret key is 1234'def function_creator () : # 평가할 표현식 expr = raw_input ( 'Enter the function (in terms of x) :') # 표현식에 사용 된 변수 x = int (raw_input ( 'Enter the value of x :')) # 평가 표현식 y = eval (expr) # 평가 결과 인쇄 print ( 'y = {}'. format (y)) if __name__ == '__main__': function_creator ()

위의 예에서 function_creator는 프로그램 실행시 사용자가 생성 한 수학적 표현을 평가하는 함수입니다.

산출:

함수 입력 (x로 표시) : x * (x + 1) * (x + 2)

x : 3 값 입력

자바 알고리즘 및 데이터 구조

y = 60

분석

이제 위에서 공유 한 코드를 확인 했으므로 좀 더 분석해 보겠습니다.

  1. 위의 함수는 x 표현식의 모든 변수를 입력으로받습니다.

  2. 실행되면 사용자에게 x 값을 입력하라는 메시지가 표시되고 그 후에 만 ​​프로그램이 생성됩니다.

  3. 마지막으로 Python 프로그램은 다음을 구문 분석하여 eval 함수를 실행합니다.expr인수로.

평가의 단점

Python의 다른 내장 함수와 마찬가지로 eval도 고려하지 않으면 문제를 일으킬 수있는 몇 가지 단점이 있습니다.

위의 예를 살펴보면 function_creator 함수의 주요 취약점 중 하나는 프로그램 내의 숨겨진 값을 노출 할 수 있고 eval이 기본적으로 괄호 안에있는 모든 것을 실행하므로 유해한 함수를 호출 할 수 있다는 것입니다.

이를 더 이해하려면 아래 예제를 살펴보십시오.

사용자의 입력

함수를 입력하십시오 (x로 표시) : secret_function ()

def __init__ 파이썬

x : 0 값 입력

산출:

y = 비밀 키는 1234입니다.

eval 함수를 사용할 때 발생하는 또 다른 위험한 상황은 os 모듈을 가져 오는 것입니다. os 모듈을 가져 오면 Python이 사용자의 인증없이 네이티브 시스템에있는 모든 파일을 읽고 쓸 수 있습니다. 이 경우 하나를 잘못 입력하면코드 줄에 모든 기본 파일이 삭제 될 수 있습니다.

이러한 모든 단점에 대한 해결책은 eval 함수의 기능을 제한하는 데 있습니다.

Python에서 평가를 안전하게 만들기

Eval은 기본적으로 액세스 권한이 있거나 이미 정의 된 함수를 구문 분석하는 옵션과 함께 제공됩니다. 코드를 작성하는 동안이 점을 염두에두면 eval의 기능이 상당히 제한되어 잘못된 것이 없다는 것을 확인할 수 있습니다.

이 개념을 더 이해하려면 아래 예를 살펴보십시오.

from math import * def secret_function () : return 'Secret key is 1234'def function_creator () : # 평가할 표현식 expr = raw_input ( 'Enter the function (in terms of x) :') # 표현식에 사용 된 변수 x = int (raw_input ( 'Enter the value of x :')) # 안전한 사전에 변수 x 전달 safe_dict [ 'x'] = x # 표현식 평가 y = eval (expr, { '__builtins __': None}, safe_dict) # 인쇄 평가 된 결과 print ( 'y = {}'. format (y)) if __name__ == '__main__': # 안전한 메서드 목록 safe_list = [ 'acos', 'asin', 'atan', 'atan2', 'ceil ','cos ','cosh ','degrees ','e ','exp ','fabs ','floor ','fmod ','frexp ','hypot ','ldexp ','log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # 안전한 메소드 사전 생성 safe_dict = dict ([(k, locals (). get (k, None)) for k in safe_list]) function_creator ()

사용자의 입력

함수를 입력하십시오 (x로 표시) : secret_function ()

x : 0 값 입력

산출:

자바 데이터 구조 및 알고리즘

NameError : 'secret_function'이름이 정의되지 않았습니다.

eval의 액세스를 제한하여 알 수 있듯이 유해한 것으로 판명 될 수있는 잘못된 출력의 가능성은 무효화되었습니다.

Eval의 사용

위 섹션에서 설명한 것처럼 몇 가지 보안상의 이유로 eval은 일반적으로 사용되지 않습니다. 그러나 여전히 eval을 사용하는 것이 도움이되는 특별한 사용 사례가 있습니다. 이들 중 가장 중요한 것은 다음과 같습니다.

  1. 사용자가 프로그램의 출력을 수정하기 위해 자신의 스크립틀릿을 입력하도록하려면 eval 함수를 사용하는 것이 도움이 될 것입니다.

  2. 수학 쿼리를 해결하기 위해 표현식을 작성하는 동안 표현식 파서를 작성하는 것보다 훨씬 쉽기 때문에 eval을 사용할 수 있습니다.

이제 eval에 대해 모두 알았으므로 장점과 단점을 염두에두고 일상적인 프로그래밍에서 동일한 기능을 사용하기를 바랍니다.

이것으로, 우리는 파이썬으로 평가하는이 기사를 끝맺습니다. 다양한 애플리케이션과 함께 Python에 대한 심층적 인 지식을 얻으려면 다음을 수행 할 수 있습니다. 연중 무휴 지원 및 평생 액세스가 가능한 라이브 온라인 교육.

질문이 있으십니까? 'Eval in Python'의 주석 섹션에서 언급하시면 다시 연락 드리겠습니다.