Python은 eval 함수를 사용하여 동적 표현식 프로세스를 수행합니다.

영문 문서:
eval(expression, globals=None, locals=None)
The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, localscan be any mapping object.
The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local namespace. If the globals dictionary is present and lacks ‘__builtins__', the current globals are copied into globals before expression is parsed. This means that expressionnormally has full access to the standard builtins module and restricted environments are propagated. If the localsdictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval() is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:
>>> x = 1
>>> eval('x+1')

This function can also be used to execute arbitrary code objects (such as those created by compile()). In this case pass a code object instead of a string. If the code object has been compiled with 'exec' as the mode argument, eval()‘s return value will be None.
Hints: dynamic execution of statements is supported by the exec() function. The globals() and locals() functions returns the current global and local dictionary, respectively, which may be useful to pass around for use by eval() or exec().
See ast.literal_eval() for a function that can safely evaluate strings with expressions containing only literals.
동적 표현식 값 구하기 실행
설명:
  1. 동적 문장을 실행하고 문장이 실행하는 값을 되돌려줍니다.
>>> eval('1+2+3+4')

  2. 첫 번째 매개 변수는 문장 문자열이고,globals 매개 변수와locals 매개 변수는 선택할 수 있는 매개 변수입니다. 제공하면,globals 매개 변수는 사전이고,locals 매개 변수는mapping 대상입니다.
  3. globals 매개 변수는 코드가 실행될 때 사용할 전역 변수를 지정하고 코드가 실행된 전역 변수를 수집하는 데 사용됩니다.

>>> g = {'num':2}

>>> eval('num + 2') #num 
Traceback (most recent call last):
 File "<pyshell#3>", line 1, in <module>
  eval('num + 2')
 File "<string>", line 1, in <module>
NameError: name 'num' is not defined

>>> eval('num + 2',g) #g num, 
4
  4. locals 매개 변수는 코드가 실행될 때 사용할 수 있는 국부 변수와 코드가 실행된 국부 변수를 수집하는 데 사용됩니다

>>> g = {'num1':2}
>>> l = {'num2':4}
>>> eval('num1+num2',g,l)
6
  5. 코드가 성공적으로 실행될 수 있도록 globals 매개 변수 사전에는 __builtins__ 이 key를 사용하면 Python에서 자동으로 key를 __ (으) 로 추가합니다.builtins__ ,value는builtins 모듈의 인용입니다.코드가builtins 모듈을 사용하지 않도록 제한하려면 글로벌에 키를 __로 추가해야 합니다builtins__,value는 {} 항목이면 됩니다.

>>> g = {}
>>> eval('abs(-1)',g)
1
>>> g = {'__builtins__':{}}
>>> eval('abs(-1)',g) # 
Traceback (most recent call last):
 File "<pyshell#9>", line 1, in <module>
  eval('abs(-1)',g)
 File "<string>", line 1, in <module>
NameError: name 'abs' is not defined
  6. globals 파라미터가 예를 제공하지 않으면, Python은 기본적으로 globals () 함수를 사용하여 되돌아오는 사전을 호출합니다.locals 파라미터가 제공되지 않을 때, 기본적으로는globals 파라미터를 사용하여 호출합니다.

>>> num = 1
>>> eval('num+2')
3

>>> globals() # num key
{'__doc__': None, 'num': 1, '__package__': None, '__name__': '__main__', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>}

>>> eval('num+2',{}) #locals ,locals =globals 
Traceback (most recent call last):
 File "<pyshell#3>", line 1, in <module>
  eval('num+2',{})
 File "<string>", line 1, in <module>
NameError: name 'num' is not defined

>>> l = locals() 
>>> eval('num+2',{},l) #locals num key, 
3

>>> locals()
{'__doc__': None, 'l': {...}, 'num': 1, '__package__': None, '__name__': '__main__', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>}
>>>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기