>백엔드 개발 >파이썬 튜토리얼 >Python 내장 함수——eval

Python 내장 함수——eval

黄舟
黄舟원래의
2017-01-19 16:39:351672검색

Python 내장 함수 - eval

eval

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

이 함수는 표현식 문자열을 동적으로 실행하는 데 사용되거나 컴파일 함수 코드 개체에 의해 컴파일됩니다.
매개변수 표현식은 표현식 문자열이거나 컴파일된 코드 개체의 이름입니다.
매개변수 globals는 표현식을 실행할 때 전역 범위의 범위를 지정할 수 있는 전역 네임스페이스입니다. 모듈을 사용할 수 있습니다.
이 매개변수가 기본값인 경우 현재 이 함수를 호출하는 현재 전역 네임스페이스가 사용됩니다.
매개변수 locals는 표현식 실행 시 액세스되는 로컬 네임스페이스를 지정하는 데 사용되는 로컬 범위 네임스페이스입니다.
전역 네임스페이스 매개변수가 표시되지만 기본 내장 모듈을 사용하는 경우 해당 모듈은 자동으로 전역 네임스페이스에 복사됩니다.
어떻게 설정하든 내장 모듈이 가능하다는 의미입니다. 사용됩니다.
두 네임스페이스 모두 기본 메서드를 사용하는 경우 이 함수를 호출할 때 네임스페이스를 사용하여 해당 변수를 찾습니다.
이 기능을 사용하는 이유는 무엇인가요?
이 기능을 사용하는 이유는 동적 언어와 컴파일 언어의 차이 때문입니다.
컴파일 언어에서는 코드를 동적으로 생성하는 것이 기본적으로 불가능하기 때문입니다.
하지만 동적 언어는 가능합니다. 이는 소프트웨어가 서버에 배포되었다는 의미입니다.
그러나 변경 사항이 거의 없는 한 코드의 이 부분을 직접 수정해야 하며 전체 소프트웨어를 다시 로드하지 않고도 변경 사항을 즉시 구현할 수 있습니다.
또한 이 기능은 머신러닝에도 활용될 수 있습니다.
예를 들어, 소프트웨어를 사용하는 빈도와 방법에 따라 코드는 사용자 변경에 맞게 동적으로 수정될 수 있습니다.
이렇게 생각해보면 코드를 자동으로 업데이트하고 발전을 이룰 수 있는 활력 능력이 있는 걸까요?
파괴적인 행동을 한다면 사실상 바이러스인 것일까요?
>>> eval('1+1')
2

#全局命名空间为空,使用局部命名空间
>>> def make_fn(code):
    import math
    ALLOWED_LOCALS = {v:getattr(math,v)
              for v in filter(
                  lambda x: x.startswith('_'),dir(math))
              }
    return eval('lambda x: %s'%code ,None,ALLOWED_LOCALS)
>>> f = make_fn('x+1')
>>> print f(2)

3

#使用全局命名空间
>>> def make_fng(code):
    import math
    ALLOWED = {v:getattr(math, v)
           for v in filter(lambda x: not x.startswith('_'), dir(math))
   }
    ALLOWED['__builtins__'] = None
    return eval('lambda x: %s' % code, ALLOWED, {})
>>> f = make_fng('cos(x)')
>>> print f(9)
-0.911130261885
>>> f = make_fng('cos(x*x)')
>>> print f(9)
0.776685982022

위는 Python 내장 function - eval 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.