Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

런타임에 Python 함수를 동적으로 정의하고 실행하는 방법

Python에서는 types 모듈의 types.FunctionType() 함수를 활용하면 런타임에 함수를 동적으로 정의하고 바로 실행할 수 있습니다.

동적 함수 정의의 기본 원리

핵심 아이디어는 실행하고자 하는 코드를 문자열 형태로 준비한 뒤, 내장 함수 compile()을 사용해 이를 코드 객체(code object)로 변환하는 것입니다. 그다음 types.FunctionType()에 이 코드 객체와 전역 네임스페이스 역할을 할 딕셔너리를 전달하면, 실제로 호출 가능한 함수 객체가 생성됩니다.

실행 예제

아래 예제는 Python 프롬프트에서 그대로 실행할 수 있습니다. 먼저 types 모듈을 가져온 후, dynf라는 이름의 동적 함수를 만들고 호출합니다.

>>> import types
>>> dynf = types.FunctionType(compile('print("Really Works")', 'dyn.py', 'exec'), {})
>>> dynf()
Really Works

dynf()를 호출하면 컴파일된 코드가 실행되어 화면에 "Really Works"라는 출력 결과가 표시됩니다.

주요 매개변수 살펴보기

  • compile(source, filename, mode): 첫 번째 인자는 실행할 코드 문자열, 두 번째 인자는 파일명(실제 파일이 존재하지 않아도 임의의 이름을 지정할 수 있음), 세 번째 인자는 컴파일 모드입니다.
  • types.FunctionType(code, globals): 첫 번째 인자는 앞서 생성한 코드 객체, 두 번째 인자는 해당 함수가 참조할 전역 변수 딕셔너리입니다.

이러한 기법은 플러그인 시스템 구축, 동적 스크립트 실행 등 런타임에 코드를 유연하게 생성해야 하는 상황에서 유용하게 활용됩니다. 다만 외부 입력을 그대로 실행할 경우 보안상 위험이 따르므로, 반드시 신뢰할 수 있는 코드에만 사용하는 것이 좋습니다.