'compile'에 해당되는 글 1건

  1. 2012.11.22 문자열로 된 파이썬 코드 실행

원하는 문자열을 프로그램 실행 중이라도 마음대로 만들 수 있기 때문에 문자열로 표현된 파이썬 코드를 실행하는 것은 유용할 수 있다. 

이런 코드를 실행하는 방법은 몇 가지가 있다.


eval 함수

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

여기서 global은 전역 영역 사전, local은 지역 영역 사전이다. 이들 인수는 선택적이다.


eval() 내장 함수는 문자열로 된 파이썬 식(Expression) 을 실행한다.

※ evaluation = "값을 구함" 이란 뜻.


즉, eval('a+10') 는 문자열로 된 a+10의 값을 구한다라는 뜻이 된다.


그리고 식만을 수행할 수 있기 때문에 문(statement)을 실행하려고 하면 SyntaxError 예외가 발생한다.




exec 함수

exec code [ in globals [, locals]]

exec는 문자열로 된 문(Statement) 을 수행한다.


exec 'a = a + 5'    ==> 문자열로 된 'a = a + 5' 이 문을 실행하라. 라는 뜻이 된다.


exec는 여러 개의 문일 수 있다.

여기서 따옴표(')가 연속적으로 3개 들어가면 긴~ 문장을 쓰겠다는 뜻이된다. 테스트 결과, 2개나 4개 이상은 안된다. 꼭 3개만 된다.




Compile 함수

compile (string, filename, kind)

=> 여기서 string은 코드 문자열, filename은 코드 문자열이 저장된 파일명이다. 코드 문자열이 파일에서 읽혀지지 않았다면 <string>이 된다. 

kind는 어떤 종류의 코드가 컴파일되야 하는지 지정한다.

'exec'라면 여러 개의 문들을 컴파일하며, 'eval'이면 하나의 식을, 'single'이면 하나의 대화적 문을 컴파일한다.

※ help(complie) 입력하면 자세히 나옴.


exec나 eval은 문자열로 입력된 코드를 분석해서 파이썬 컴파일 코드로 변환한다. 만일 이러한 코드를 반복적으로 수행하게 되면 변환에 필요한 시간은 크게 늘어나게 된다. 효율적인 수행 방법은 문자열을 파이썬 코드로 한번 변환해 둔 후에, 반복 실행할 때마다 이 코드를 활용하는 것이다. 

compile() 내장 함수는 문자열을 컴파일하여 파이썬 코드를 리턴한다. 



eval은 식만 실행할 수 있다. 그런데 a = a + 1 이 코드 문자열로 되어있다... 이건 문이다.

그런데 실행이 잘~ 된다.

확실치는 않지만 아마도... compile 함수로 파이썬코드로 바꿔주어서 그런 것 같다.



Posted by scii
: