반응형
질문
PEP 8는 다음과 같이 명시합니다:
임포트는 항상 파일의 맨 위에 위치하며, 모듈 주석과 독스트링 바로 다음에 오고, 모듈 전역 변수와 상수 앞에 위치합니다.
하지만 내가 임포트하는 클래스/메소드/함수가 드물게 사용되는 경우, 필요할 때만 임포트하는 것이 더 효율적이지 않을까요?
이렇게 하는 것이:
class SomeClass(object):
def not_often_called(self)
from datetime import datetime
self.datetime = datetime.now()
이렇게 하는 것보다 더 효율적이지 않을까요?
from datetime import datetime
class SomeClass(object):
def not_often_called(self)
self.datetime = datetime.now()
답변
모듈 가져오기는 꽤 빠르지만 즉시 실행되지는 않습니다. 이는 다음을 의미합니다:
- 모듈의 상단에 가져오기를 넣는 것은 괜찮습니다. 이는 한 번만 지불하는 미미한 비용입니다.
- 함수 내에 가져오기를 넣으면 해당 함수를 호출하는 데 더 많은 시간이 걸립니다.
따라서 효율성에 신경을 쓴다면 가져오기를 상단에 두세요. 프로파일링을 통해 성능을 개선할 가장 적합한 위치를 확인하기 위해 함수 내로 이동시키는 것만 고려하세요 (성능 개선을 위해 프로파일링을 했는지 확인했죠??)
지연된 가져오기를 수행하는 가장 좋은 이유는 다음과 같습니다:
- 선택적 라이브러리 지원. 코드에 여러 경로가 있고 다른 라이브러리를 사용하는 경우, 선택적 라이브러리가 설치되지 않아도 코드가 중단되지 않습니다.
- 플러그인의
__init__.py
에서는 가져올 수 있지만 실제로 사용되지 않을 수 있습니다. 예를 들어,bzrlib
의 지연로딩 프레임워크를 사용하는 Bazaar 플러그인이 있습니다.
반응형
댓글