파이썬에서 네임스페이스는 이름과 객체가 연결된 사전입니다. 네임스페이스의 수준: 로컬, 글로벌, 내장. 모듈은 코드를 구성하는 별도의 공간입니다. 임포트할 때 파이썬은 각 모듈에 대해 새로운 네임스페이스를 생성합니다.
import module — 모듈을 임포트하고 module.name을 통해 객체에 접근합니다.from module import name — 모듈에서 현재 네임스페이스로 직접 객체를 임포트합니다 (이름 충돌의 위험이 있습니다).as — 별칭을 지정할 수 있습니다.이름 충돌을 피하기 위해:
import mymodule), 별표 (from... import *)를 사용하지 마세요.__init__.py가 있는 디렉터리).import module as m).project/
package/
__init__.py
module1.py
module2.py
import package.module1 from package.module2 import function as fn
질문: 모듈을 두 번 임포트하는 것은 무엇이 다른가요? 모듈 코드가 다시 실행되나요?
답변: 아닙니다. 처음 임포트할 때 모듈이 실행되고 결과가 sys.modules에 캐시됩니다. 반복 임포트는 이미 로드된 모듈 객체를 반환하고 코드가 다시 실행되지 않습니다.
# module.py print('Hello!') # main.py import module # Hello! 출력 import module # 아무 것도 출력되지 않음
이야기
from settings import *를 사용하여 설정 변경 시 예상치 못하게 "로컬 변수"가 "덮어쓰기" 되는 바람에 해결하기 어려운 버그가 발생했습니다.이야기
utils.py)을 생성했습니다. 통합 단계에서 "같은" 이름의 모듈이 서로 "대체"되어 예상치 못한 동작과 복잡한 버그가 발생했습니다.이야기
어떤 라이브러리에서 importlib.reload를 통해 새로운 설정으로 모듈을 "시스템적으로 다시 임포트"하려 했습니다. 그러나 이미 임포트된 다른 모듈이 객체에 대한 구형 링크를 유지하고 있어 변경 사항이 애플리케이션의 모든 부분에서 적용되지 않았습니다.