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()
  • 2016년 02월 11일에 작성됨

조회수 205


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
  • 2016년 02월 11일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close