차밍이

[Python] eval() / exec() 함수로 문자열을 파이썬 코드로 실행하기 본문

파이썬/기본 문법 정리

[Python] eval() / exec() 함수로 문자열을 파이썬 코드로 실행하기

2022. 2. 26. 17:52
반응형

목차

    eval() 과 exec()는 무엇인가?

    eval exec 함수는 파이썬의 내장 함수이다.

    문자열로 적어진 수식 혹은 코드를 파이썬 코드로 실행할 때 사용된다.

    eval : 문자열로 구성된 식을 처리한다.

    exec : 문자열로 구선된 코드를 컴파일하여 수행한다.

     

    eval 함수

    문자열 식을 수행한다

    식만 처리하므로 변수 선언 및 할당과 같은 것은 할 수 없다.

    eval("3 * 4 * 5 * 6")
    
    >>> 360

    코드 내에 변수들의 값 또한 잘 받아서 수행한다.

    a = 10
    eval("a * 3 * 4 * 5 * 6") # 문자열 식의 a 는 파이썬의 a 변수와 동일
    
    >>> 3600

    eval은 수행한 후 결과 또한 반환한다.

    위의 수식 결과를 return 하는 것을 볼 수 있음

     

    exec 함수

    문자열로 구성된 파이썬 코드를 수행한다.

    코드로 받아들여 수행하므로

    변수 선언이나 할당 등을 할 수 있다.

    a = 10
    exec("b = 5")
    eval("a / b")
    
    >>> 2.0

    exec는 코드를 수행한다.

    수행하기만 한다.

    수행하고 결과를 반환하지 않는다.

    위의 코드에서 b = 5를 수행했고 eval을 사용해서 a / b를 수행했다.

    eval은 결과인 2.0 값을 보내준다.

     

    결과 값 반환에 대한 eval과 exec의 차이

    하지만 exec는 결과를 반환하지 않는다.

    딱 수행만 한다.

    예를 들어 위의 예제를 수정해보자.

    a = 10
    exec("b = 5")
    exec("a / b")

    jupyter 에서 수행해보면 아무 값도 보여주지 않는 것을 알 수 있다.

    a / b 딱 수행하고 끝나버린 것이다.

    그 값을 확인하고 싶다면 새로운 변수를 선언해서 결과 값을 받도록 해야한다.

    수행한 결과 값을 확인하는 방식에 대해서 두 함수의 차이는 아래와 같다.

    exec("x = a / b")
    x
    
    >>> 2.0
    
    ##############################
    
    x = eval("a / b")
    x
    
    >>> 2.0

     

     

    반응형

    관련된 글 보기

    Comments