import는 꼭 코드 맨 윗줄에 써야 하나요?

보통 모듈을 import할 때는 소스코드1보다는 소스코드2같이 맨 윗줄에 넣는 것 같던데

이 클래스안에서만 쓰이는 모듈이라면 굳이 맨 윗줄에 import해 줄 필요는 없을 것 같은데 다들 맨 윗줄에서 import하나요? 더 빨라서 그런걸까요 ?_?

소스코드1

class SomeClass(object):
    def not_often_called(self)
        from datetime import datetime
        self.datetime = datetime.now()

소스코드2

from datetime import datetime
class SomeClass(object):
    def not_often_called(self)
        self.datetime = datetime.now()

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    내부에서 모듈을 import 하는 함수를 여러 번 실행하더라도 모듈은 한 번만 import 되기 때문에

    모듈 맨 위에서 import하던, 함수 안에서 import하던 import되는 횟수에는 차이가 없습니다.

    그리고 사실, 모듈 맨 위에서 import하면 컴파일러가 LOAD_GLOBAL하는 반면, 함수 안에서는 LOAD_FAST하기 때문에 함수 안에서 import하는 쪽이 더 빠릅니다.(아래에 수행속도를 비교해놨습니다)

    그럼에도 맨 위에 모듈을 import하는 이유는 파이썬 스타일 가이드 PEP 08 - Imports가 그렇게 쓰라고 권장하기 때문입니다.

    Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.

    맨 위에서 import

    import random
    
    def f():
        L = []
        for i in xrange(1000):
            L.append(random.random())
    
    
    for i in xrange(1000):
        f()
    
    $ time python import.py
    
    real        0m0.721s
    user        0m0.412s
    sys         0m0.020s
    

    함수 안에서 import

    def f():
        import random
        L = []
        for i in xrange(1000):
            L.append(random.random())
    
    for i in xrange(1000):
        f()
    
    $ time python import2.py
    
    real        0m0.661s
    user        0m0.404s
    sys         0m0.008s
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.