이 글은 주로 Python에서 import reload __import__의 차이점에 대한 자세한 설명을 소개합니다. 필요한 친구들은 참고하시면 됩니다
import
기능: .py를 포함한 Python 표준 모듈 가져오기/소개 파일, __init__.py 파일이 있는 디렉터리(사용자 정의 모듈).
import module_name[,module1,...] from module import *|child[,child1,...]
참고: import 문을 여러 번 재사용하면 지정된 모듈이 다시 로드되지 않지만 모듈의 메모리 주소는 지역 변수 환경을 참조합니다.
예:
pythontab.py
#!/usr/bin/env python #encoding: utf-8 import os print 'in pythontab',id(os)
test.py
#!/usr/bin/env python #encoding: utf-8 import pythontab #第一次会打印pythontab里面的语句 import os #再次导入os后,其内存地址和pythontab里面的是一样的,因此这里只是对os的本地引用 print 'in c',id(os) import pythontab #第二次不会打印pythontab里面的语句,因为没有重新加载
reload
기능: 로드된 모듈을 다시 로드합니다. 일반적으로 원래 모듈의 변경과 같은 특수한 상황에 사용됩니다. 모듈을 다시 로드합니다. 이전에 수입되었어야 합니다.
import os reload(os)
참고:
reload는 로드된 모듈을 다시 로드하지만 원래 인스턴스는 여전히 이전 모듈을 사용하고 새로 생성된 인스턴스는 다시 로드한 후 새 모듈을 사용하며 원래 메모리는 계속 사용됩니다. ;에서 지원할 수 없습니다. . 수입. . 형식 모듈이 다시 로드됩니다.
예:
pythontab.py
#!/usr/bin/env python #encoding: utf-8 import os print 'in pythontab',id(os)
test.py
#!/usr/bin/env python #encoding: utf-8 import pythontab #第一次import会打印pythontab里面的语句 print id(pythontab) #原来pythontab的内存地址 reload(pythontab) #第二次reload还会打印pythontab里面的语句,因为有重新加载 print id(pythontab) #reload后pythontab的内存地址,和原来一样
확장:
위에서 언급했듯이 다시 로드 기능은 원본 모듈 파일이 다음과 같은 경우를 제외하고 특별한 상황에서만 사용됩니다. 수정되었습니다. 다시 로드 기능을 사용해야 하는 다른 상황은 무엇입니까?
#!/usr/bin/env python #encoding: utf-8 import sys #引用sys模块进来,并不是进行sys的第一次加载 reload(sys) #重新加载sys sys.setdefaultencoding('utf8') ##调用setdefaultencoding函数
위 코드는 맞고, 다음 코드를 테스트해 보세요.
#!/usr/bin/env python #encoding: utf-8 import sys sys.setdefaultencoding('utf8')
위 테스트는 실패하는데 왜 setdefaultencoding을 호출할 때 sys 모듈을 먼저 다시 로드해야 할까요? 여기서 import 문은 실제로 sys의 첫 번째 import 문이 아니기 때문에 이는 실제로 sys 모듈의 두 번째 또는 세 번째 import 문일 수 있으며 sys에 대한 참조일 뿐이며 다시 로드해야만 다시 로드할 수 있습니다. 그렇다면 다시 로드해야 하는 이유는 무엇입니까? 직접 참조하면 함수를 호출할 수 없습니다. setdefaultencoding 함수는 시스템에서 호출된 후 삭제되므로 가져오기를 통해 참조할 때 더 이상 존재하지 않습니다. 따라서 setdefaultencoding을 사용할 수 있고 인터프리터의 현재 문자 인코딩을 사용할 수 있도록 sys 모듈을 한 번 다시 로드해야 합니다. 코드에서 수정되었습니다. 다음 코드를 시도하면 동일한 오류가 보고됩니다.
#!/usr/bin/env python #encoding: utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') del sys.setdefaultencoding ##删除原来的setdefaultencoding函数 sys.setdefaultencoding('gb2312')
그럼 이전에 sys를 가져오고 setdefaultencoding 함수를 호출한 사람은 누구입니까? 대답은 Python 설치 디렉터리의 Lib 폴더에 있습니다. site.py [python2.6] 파일에는 main() --> setencoding() -->sys.setdefaultencoding(이 있습니다. 인코딩), 이 site.py는 파이썬 인터프리터가 시작될 때마다 자동으로 로드되므로 메인 함수는 매번 실행되고, setdefaultencoding 함수는 나오자마자 삭제됩니다.
__import__
함수:
import 문과 동일한 함수이지만 __import__는 함수이고 문자열만 매개변수로 받기 때문에 그 역할을 짐작할 수 있습니다. 실제로 import 문은 가져오기 작업을 수행하기 위해 이 함수를 호출합니다. import sys <==>sys = __import__('sys')
사용법:
__import__(module_name[, globals[, locals[, fromlist]]]) #可选参数默认为globals(),locals(),[] __import__('os') __import__('os',globals(),locals(),['path','pip']) #等价于from os import path, pip
설명:
보통 동적 로딩 중에 사용됩니다. 예를 들어, 이 기능은 폴더의 모든 모듈을 로드하고 싶지만 그 아래의 모듈 이름이 자주 변경되는 경우 이 기능을 사용하여 모든 모듈을 동적으로 로드할 수 있습니다. 가장 일반적인 시나리오는 플러그인 기능을 지원하는 것입니다.
확장:
모듈은 문자열을 통해 동적으로 가져올 수 있으므로 문자열을 통해 모듈을 동적으로 다시 로드할 수 있나요? 오류를 직접 보고하려면 reload('os')를 시도해 보세요. 직접 다시 로드할 수는 없지만 먼저 모듈 가져오기를 취소한 다음 __import__를 사용하여 모듈을 다시 로드할 수 있습니다. 이제 unimport 작업이 어떻게 구현되는지 살펴보겠습니다. Python 해석에서는 globals(), locals(), vars(), dir() 및 기타 함수를 통해 현재 환경에 로드된 모듈과 해당 위치를 볼 수 있습니다. 보기만 가능하므로 가져오기를 취소할 수 없습니다. 그러나 sys.modules라는 모듈을 저장하기 위한 별도의 장소가 있습니다. , 기본적으로 일부 추가 모듈이 로드되고 다음 단계는 가져오기 취소임을 나타냅니다.
#!/usr/bin/env python #encoding: utf-8 import sys __import__('a') #第一次导入会打印消息 del sys.modules['a'] #unimport __import__('a') #再次导入还是会打印消息,因为已经unimport一次了 __import__('a') #这次就不会打印消息了
요약
위 내용은 Python에서 import, reload 및 __import__의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!