ABOUT ME

Data Engineer를 꿈꾸는 개발자입니다.

Today
Yesterday
Total
  • [Python] import vs runtime
    개발/Python 2022. 9. 26. 16:39

    Python은 Hybrid 언어로 Interpreter를 이용한 Compile이 동작(import time)하고 난 뒤 Runtime이 동작하게 됩니다.

     

    import time


    • import time 시 python 파일의 소스코드를 위에서부터 파싱 및 실행을 위한 Byte code를 만들어줍니다.
    • 즉, 파일 내의 Function과 Class method를 제외한 코드들을 실행합니다.
    • Interpreter 영역

     

    runtime


    • 모든 Code가 실행되는 순간

     

    import time vs runtime

    • 이 때 Import와 runtime에 대한 이해가 없다면, 에러를 마주 할 수 있습니다.
    • 아래 코드에서 어떤 동작 결과가 예상하여 봅시다.
    #a.py
    import b
    
    def function_a():
        print('function_a')
        return b.function_b()
    
    
    function_a()
    #b.py
    import a
    
    def function_b():
        print('function_b')
    
    
    def function_c():
        print('function_c')
        return a.function_a()

     

    • 실제 결과입니다.
    • b만 제대로 동작하고 있습니다.
    • a.py가 동작하지 않는 이유를 알기 위해 순차적으로 접근하여 보면, import b -> function_a -> b.function_b() -> b -> a 와 같은 형태로 계속 반복되기 때문에 a,b가 계속 import되는거와 같습니다.
    # a.py result
    function_a
    Traceback (most recent call last):
      File "a.py", line 1, in <module>
        import b
    		line 1, in <module>
        import a
    		line 9, in <module>
        function_a()
       		line 6, in function_a
        return b.function_b()
    AttributeError: 'module' object has no attribute 'function_b'
    # b.py result
    function_a
    function_b

     

    • 어떻게 하면 제대로 동작하게 만들 수 있을까요?
    • 방법 = Runtime으로 옮겨주면 됩니다.
    #b.py
    
    def function_b():
        print('function_b')
    
    def function_c():
        import a
        print('function_c')
        return a.function_a()

    '개발 > Python' 카테고리의 다른 글

    [Python] - Requirements  (1) 2022.09.26
    [Python] - Cyclic reference  (0) 2022.09.19
    [Python] - Garbage Collection  (0) 2022.09.19
    [Python] - 동작원리( Build , hybrid )  (0) 2022.09.18
    [Python] - Decorator  (0) 2022.09.02

    댓글

Designed by Tistory.