이 기사는 Python에서 import와 __import__()의 차이점을 비교한 것입니다. 이는 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
먼저 둘 사이의 차이점에 대해 이야기해 보겠습니다.
가져오기 명령은 두 가지 작업을 수행합니다. 1) 모듈 검색, 2) 지역 변수 바인딩
내장 함수 __import__()는 한 가지 작업만 수행합니다. 모듈
가져오기 명령을 실행하는 동안 __import__()가 호출되어 모듈 검색을 완료합니다.
모듈 검색 프로세스:
검색 프로세스를 이해하기 전에 먼저 내부 구현의 여러 역할을 이해해 보겠습니다.
a) 검색된 모듈은 모듈 캐시(sys.modules)에 존재합니다.
b) finders | importers: 모듈이 어디에 있는지 검색하는 데 사용됩니다(모듈이 어디에 있는지, 어떤 로더를 사용하여 로드해야 하는지 등의 정보 포함).
파인더는 내장 모듈에서 찾을 수 있고, 가져오기 프로그램은 다른 위치에서 찾을 수 있습니다.
가져오기 도구는 확장 가능하며 파일 시스템의 특정 경로, zip 및 URL을 지원할 수 있습니다.
c) 로더: 모듈 사양에 따라 로드하여 Python에서 모듈을 생성합니다.
module = modulespec.loader.load_module(modulespec.name)
검색 과정은 다음과 같습니다.
1) 검색할 모듈 이름이 캐시(sys.modules)에 있으면 다음을 수행합니다. 다음 작업:
1.1) 값이 None이면 ModuleNotFoundError가 발생합니다.
1.2) 값이 None이 아니면 값이 직접 반환됩니다.
2) 찾지 못한 경우 파인더는 내장 모듈에서 해당 값을 찾습니다. , 임포터가 이를 찾고 임포터도 이를 찾을 수 없습니다. 모듈 이름이 캐시되고 값이 None이면 ModuleNotFoundError가 발생합니다.
임포터를 사용하여 검색할 때 .pyc를 찾으면 먼저 .pyc가 최신인지 확인해야 합니다.
찾은 후 돌아와서 module-spec 생성 및 생성
3) module-spec의 로더가 모듈을 로드하고 실행하도록 합니다.
module = modulespec.loader.load_module(modulespec.name) sys.modules[modulespec.name] = module modulespec.loader.exec_module(module)
4) 마지막으로 찾지 못한 경우 해당 모듈의 이름을 기록합니다. 모듈을 캐시에 추가하면 값은 None이고 ModuleNotFoundError
위 내용은 Python에서 import와 __import__()의 차이점 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!