실행() 함수는 문자열 또는 개체 코드일 수 있는 Python 프로그램의 동적 실행에 사용됩니다. 문자열인 경우 문자열은 Python 문 모음으로 구문 분석된 다음 구문 오류가 발생하지 않는 한 실행되고 개체 코드인 경우 간단히 실행됩니다. return 문은 함수 정의 외부는 물론 exec() 함수에 전달된 코드 컨텍스트 내에서도 사용되지 않을 수 있다는 점에 주의해야 합니다. 어떤 값도 반환하지 않으므로 다음을 반환합니다. 없음 .
Python exec() 구문
exec(객체[, 전역[, 지역]])
매개변수:
- 물체: 이미 말했듯이 이것은 문자열이나 객체 코드일 수 있습니다.
- 전역: 이는 사전일 수 있으며 매개변수는 선택사항입니다.
- 현지인: 이는 매핑 개체일 수 있으며 선택 사항이기도 합니다.
Python에서 exec()는 어떻게 작동하나요?
이 예에서는 다음을 사용하여 Python에서 동적 실행을 볼 수 있습니다.exec()>
기능. 이는 개체에 포함된 코드를 동적으로 실행하는 기능을 보여 주며 Python의 동적 실행 개념을 보여줍니다.
파이썬3
arraylist에서 제거
prog> => 'print('The sum of 5 and 10 is', (5+10))'> exec> (prog)> |
>
>산출
The sum of 5 and 10 is 15>
경고 또는 제한 사항
exec() 함수 내에서 메서드를 사용하기 전에 exec()가 지원하는 모든 함수가 무엇인지 염두에 두어야 합니다. 이를 보려면 dir() 함수를 사용할 수 있습니다.
이 예에서는 Python의 동적 실행을 다음과 같이 볼 수 있습니다.dir()>
함수는 내에서 실행됩니다.exec()>
Python의 동적 실행 개념을 보여주는 함수입니다.
파이썬3
# The math class is used to include all the> # math functions> from> math> import> *> exec> (> 'print(dir())'> )> |
>
>산출
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']>
전역 및 지역 매개변수
Python을 사용하면 필요하지 않을 수도 있는 전역 및 로컬 매개변수를 사용하여 다양한 변수와 메서드의 사용을 제한할 수 있습니다. 이러한 로컬 및 글로벌 매개변수는 로컬 또는 글로벌 변수 주로 사전에 사용됩니다. 로컬이 누락된 경우 전역 매개변수가 우선합니다. 이는 두 필드 모두에 전역을 사용할 수 있음을 의미합니다. 전역 매개변수만 전달할 때 코드가 어떻게 작동하는지 살펴보겠습니다.
파이썬3
# Here we have passed an empty dictionary> from> math> import> *> exec> (> 'print(dir())'> , {})> |
Java를 int로 변환
>
>산출
['__builtins__']>
따라서 빈 사전을 전역 매개변수로 전달하면 __builtins__만 표시되고 이전 예제와 같이 다른 수학 함수는 표시되지 않습니다. 이는 개체 매개변수에 대해 __builtins__만 지원된다는 의미입니다. 이는 다른 모든 기능이 해당 개체에 대해 제한됨을 의미합니다. 이를 증명하기 위해 수학 함수를 사용하여 어떤 일이 일어나는지 살펴보겠습니다.
파이썬3
.04를 분수로
# An exception will be raised> from> math> import> *> exec> (> 'print(factorial(5))'> , {})> |
>
>
이 예에서는 120을 출력으로 인쇄해야 하지만 대신 No Output을 표시하고 예외를 발생시킵니다. 수학 모듈을 가져왔지만 전역 매개변수를 전달하여 설정한 제한으로 인해 Factorial() 메서드가 작동하지 못했습니다.
또한 많은 기능 중 몇 가지를 실행하도록 허용할 수도 있습니다. 계승() 함수를 제외하고 다른 모든 수학 모듈을 제한하고 싶다고 가정해 보겠습니다.
파이썬3
# factorial() will be executed> from> math> import> *> exec> (> 'print(factorial(5))'> , {> 'factorial'> :factorial})> |
>
>산출
120>
또한 이러한 사전 정의된 메소드의 이름을 변경하고 실행 중에 사용자 정의 이름을 지정할 수도 있습니다. 함수의 이름을 다음과 같이 변경할 수 있습니다. 계승() 에게 사실() , 이는 사용자 정의입니다.
파이썬3
다중 테이블 SQL 선택
# factorial() renamed as fact> from> math> import> *> exec> (> 'print(fact(5))'> , {> 'fact'> : factorial})> |
>
>산출
120>
이 시나리오에서는 전역 및 로컬 매개 변수를 모두 전달하여 실행된 코드의 동작을 특정 요구 사항에 맞게 조정할 수 있으며 Python에서 동적 실행의 다양성을 보여줍니다.
파이썬3
from> math> import> *> exec> (> 'print(dir())'> , {> 'built'> : __builtins__}, {> 'sum'> :> sum> ,> 'iter'> :> iter> })> |
리눅스 디렉토리 이름 바꾸는 방법
>
>산출
['iter', 'sum']>
Python의 동적 실행을 통해 다음과 같은 특정 메서드를 실행할 수 있습니다.sum()>
그리고iter()>
내부에 내장된 메서드와 함께exec()>
Python에서 동적 실행의 유연성을 보여주는 함수입니다. 이를 통해 exec() 함수 내에서는 모든 내장 메소드와 함께 sum, iter 메소드만 실행할 수 있습니다. 다음과 같이 __buildins__의 사용을 제한할 수도 있습니다:
파이썬3
#__builtins__ has been restricted using None> from> math> import> *> exec> (> 'print(dir())'> , {> '__builtins__'> :> None> }, {> 'sum'> :> sum> ,> 'print'> :> print> ,> 'dir'> :> dir> })> |
>
>산출
['dir', 'print', 'sum']>