섹션 5 모듈

6814 단어
모듈은 프로그램 코드와 데이터를 다시 사용하기 위해 가장 높은 단계의 프로그램 조직 단원이다.
모듈은 변수 이름의 봉인으로 이름 공간으로 여겨진다.모듈을 가져올 때 모듈 파일의 전역 역할 영역은 모듈 대상의 명칭 공간이 됩니다.
모듈 파일 맨 위에 정의된 모든 변수 이름은 모듈 대상의 속성이 됩니다.
모듈에는 세 가지 역할이 있습니다.
  • 코드 재사용
  • 시스템 네임스페이스 구분
  • 서비스 및 데이터 공유
  • 1 모듈 가져오기


    가져오기 문의 모듈 이름은 두 가지 역할을 합니다.
  • 로드해야 하는 외부 문서 인식
  • 가져온 모듈에 값을 부여하는 변수
  • 모듈 정의 대상은 import이 실행될 때 생성됩니다.
    가져오기 시 실행되는 연산은 프로그램이 지정된 파일을 처음 가져올 때 다음 세 단계를 수행합니다.
  • 모듈 파일 찾기
  • 바이트 코드로 편집(필요한 경우)
  • 실행 모듈 코드, 정의된 대상 만들기
  • 이 세 가지 절차는 프로그램이 실행될 때, 모듈이 처음 가져올 때만 실행된다.이후 같은 모듈을 가져올 때 이 세 단계를 건너뛰고 메모리에 불러온 모듈 대상만 추출합니다.
    Python은 불러온 모듈을 sys.modules 에 저장하고, 처음 가져올 때 이 테이블을 검사합니다.모듈이 존재하지 않으면 이 세 단계를 실행합니다.

    1.1 검색


    Python의 모듈 검색 경로는 다음 섹션으로 구성됩니다.
  • 프로그램의 홈 디렉터리
  • PYTHONPATH 환경 변수의 디렉토리(설정된 경우)
  • 표준 링크 라이브러리 디렉토리
  • 경로 파일의 모든 내용.pth
  • 그것들을 조합하면 모듈 검색 경로sys.path다.그 중에서 첫 번째와 세 번째는 자동으로 정의되고 두 번째와 네 번째는 검색 경로를 넓힐 수 있다.파이톤은 왼쪽에서 오른쪽으로 sys.path 디렉터리를 처음부터 끝까지 검색합니다.

    1.1.1 마스터 카탈로그


    Python은 홈 디렉토리에서 가져온 파일을 먼저 검색합니다.홈 디렉터리의 의미는 코드를 어떻게 실행하는지와 관련이 있다.프로그램을 실행할 때, 메인 디렉터리는 프로그램의 맨 윗부분 스크립트를 포함하는 디렉터리입니다.대화식 모드에서 홈 디렉토리는 현재 작업 디렉토리입니다.
    파이톤은 항상 이 디렉터리를 우선적으로 검색하기 때문에 다른 디렉터리에 있는 같은 이름의 모듈을 덮어씁니다. 이런 식으로 표준 라이브러리 모듈을 덮어쓰지 않도록 주의하십시오.

    1.1.2 PYTHONPATH 카탈로그


    그런 다음 Python은 PYTHONPATH 환경 변수(설정된 경우)에 나열된 디렉토리를 왼쪽에서 오른쪽으로 검색합니다.이 목록에 가져올 디렉터리를 모두 포함시켜 모듈 검색 경로를 확장할 수 있습니다.
    이 설정은 가져온 파일이 디렉토리에 걸쳐 있을 때 가져오는 파일과 가져오는 파일이 같은 디렉토리에 없는 경우에만 중요합니다.

    1.1.3 표준 라이브러리 디렉토리


    그런 다음 Python은 표준 라이브러리 모듈이 있는 디렉토리를 자동으로 검색합니다.이러한 디렉토리는 반드시 검색되므로 PYTHONPATH 또는 .pth 경로 파일에 추가할 필요가 없습니다.

    1.1.4 .pth 파일 디렉토리


    접미사 .pth 파일에서 디렉터리를 한 줄로 나열하면 PYTHONPATH의 대안으로 사용할 수 있습니다.Python은 파일의 줄마다 나열된 디렉터리를 모듈 검색 경로 목록의 마지막에 처음부터 끝까지 추가합니다.
    파이톤은 현재 작업 디렉터리도 추가해서 PYTHONPATH 다음에 표준 라이브러리 디렉터리 앞에 놓을 수 있습니다.명령줄에서 프로그램을 시작할 때 현재 작업 디렉터리와 맨 윗부분 파일의 홈 디렉터리 (즉 프로그램 파일이 있는 디렉터리) 는 반드시 같지 않습니다.프로그램을 실행할 때마다 현재 작업 디렉터리가 바뀔 수 있기 때문에 이 값에 의존해서는 안 됩니다.
    프로그램이 시작될 때, 파이톤은 자동으로 맨 윗부분 파일의 홈 디렉터리 (또는 현재 작업 디렉터리의 빈 문자열 지정), 모든 PYTHONPATH 디렉터리, 표준 라이브러리 디렉터리, 그리고 이미 만들어진 .pth 경로 파일의 디렉터리를 통합합니다.
    Python은 가져온 파일 이름과 일치하는 첫 번째 검색 경로를 선택합니다.import b 문이 로드될 수 있습니다.
  • 소스 파일b.py
  • 바이트 파일 b.pyc
  • 디렉토리b(패키지 가져오기 시)
  • 컴파일된 확장 모듈(일반적으로 C\C++로 작성), 가져올 때 동적 링크(예를 들어 .so, .dll, 또는 .pyd
  • C로 작성된 내장 모듈 및 정적 링크
  • ZIP 파일 구성 요소, 가져오기 시 자동 압축 해제
  • 메모리에 있는 이미지 (fronzen 실행 가능한 파일의 경우)
  • Java 클래스(Jython 버전의 Python 중)
  • .NET 구성 요소 (IronPython 버전의 Python 중)
  • 디렉터리에 b.pyb.so 두 개의 파일이 있으면 파이톤은 왼쪽에서 오른쪽으로 sys.path 검색하고 가장 먼저 (가장 왼쪽) 나오는 파일을 불러옵니다.같은 디렉터리에 b.pyb.so 가 있다면, 어떤 파일을 불러올지 알 수 없습니다.

    1.2 컴파일


    모듈의 검색 경로를 옮겨다니며 원본 코드 파일을 찾으면 필요할 때 파이톤은 바이트 코드로 컴파일합니다.
    Python은 바이트 파일과 원본 파일의 시간 스탬프를 비교합니다.만약 바이트 파일이 원본 파일보다 오래되면 프로그램이 실행될 때 자동으로 바이트 파일을 생성합니다.그렇지 않으면 컴파일 절차를 건너뛸 것입니다.
    파이썬이 검색 경로에서 바이트 파일만 발견하고 원본 코드 파일이 없으면 바이트 파일을 직접 불러옵니다.
    파일을 가져올 때 컴파일됩니다.가져온 파일만 기계에 .pyc 바이트 파일을 남겨서 가져오는 속도를 높일 수 있습니다.최상위 파일의 바이트 코드 파일은 내부에서 사용한 후에 버려집니다.

    1.3 실행

    import 작업의 마지막 단계는 모듈의 바이트 코드를 실행하는 것이다.파일의 모든 문이 순차적으로 실행됩니다.이 단계에서 모든 변수 이름에 대한 값 연산은 모듈 파일의 속성을 생성합니다.

    2 모듈 사용


    Python 3에서 from * 문은 모듈 파일의 맨 위에만 사용할 수 있고 함수에는 사용할 수 없습니다.importfrom는 모두 잠재적인 부치문구이다.
  • import 전체 모듈의 대상을 하나의 대상 이름에 값을 부여
  • from 한 개 이상의 변수 이름을 다른 모듈의 동명 대상에게 부여
  • from로 복사된 변수 이름은 공유 대상에 대한 인용이 됩니다.함수 매개 변수와 마찬가지로 이미 꺼낸 변수 이름에 값을 재부여하여 복제된 부분에 영향을 주지 않는 모듈;그러나 체크 아웃된 가변 객체를 수정하면 가져오기 모듈의 객체에 영향을 줍니다.예를 들어 파일small.py:
    x = 1
    y = [1, 2]
    
    % python
    >>> from small import x, y
    >>> x = 42
    >>> y[0] = 42
    

    여기x는 공유의 가변 대상이 아니지만y은.가져온 사람의 변수 이름 y 과 가져온 사람이 같은 목록 대상을 인용했습니다.그래서 그 중 한 곳에서 수정하면 다른 곳의 대상에게도 영향을 줄 수 있다.
    >>> import small
    >>> small.x
    1
    >>> small.y
    [42, 2]
    
    from로 복사된 변수 이름은 원본 파일과 관련이 없습니다.다른 파일의 전역 변수 이름을 실제로 수정하려면 import를 사용해야 합니다.
    % python
    >>> from small import x, y
    >>> x = 42    #  x
    
    >>> import small
    >>> small.x = 42   #  x
    
    from의 첫 번째 단계도 일반적인 가져오기 작업으로 전체 모듈을 내용을 가져옵니다. (아직 가져오지 않았다면)

    3 모듈 네임스페이스


    모듈 파일의 맨 윗부분 (함수나 클래스가 아닌 주체 내) 에서 값을 부여한 변수 이름은 모두 이 모듈의 속성이 됩니다.
    모듈의 명칭 공간은 __dict__ 속성 또는 dir(M)를 통해 얻을 수 있습니다.
    변수의 의미는 반드시 원본 코드의 값 부여 문장의 위치에 의해 결정된다.

    4팩 가져오기


    Python이 디렉터리를 처음 가져올 때, 이 디렉터리 아래 __init__.py 파일의 모든 코드를 자동으로 실행합니다.따라서 이 파일에 패키지 파일에 필요한 초기화 코드를 넣을 수 있다.__init__.py 파일에서 __all__ 목록을 사용할 수 있으며, 디렉터리가 from * 문구로 가져올 때 내보낼 하위 모듈의 이름을 정의합니다.설정__all__이 없으면 from * 문장은 이 디렉터리에 끼워 넣은 하위 모듈을 자동으로 불러오지 않습니다.

    4.1 패키지 상대 가져오기


    Python 3에서 패키지 가져오기의 변경 사항:
  • 모듈 가져오기 시 검색 경로의 의미를 수정했습니다. 기본적으로 패키지 자체의 디렉터리를 건너뛰고 검색 경로의 다른 구성 요소만 검사합니다. 이를'절대'가져오기라고 합니다.
  • from 문법을 확장하여 패키지 자체만 검색하는 디렉터리를 현저하게 가져올 수 있도록 했다. 이를'상대적'가져오기라고 한다.
  • from 문은 모듈 검색 경로에서 특정 모듈을 가져오는 대신 같은 패키지에 있는 모듈을 점호로 가져옵니다(절대 가져오기).
  • 패키지 내에서만 검색하고 모듈 검색 경로에 있는 같은 이름의 파일은 검색하지 않습니다.직접적인 효과는 패키지 모듈이 외부의 모듈을 덮어쓰는 것이다.
  • 파이톤 3에서 패키지 코드의 일반적인 가져오기 (앞에 점 번호가 없음) 는 기본적으로 절대적입니다. 패키지 자체를 포함하는 디렉터리를 무시하고 sys.path에서만 디렉터리를 검색합니다.

  • 상대 가져오기는 패키지에서만 가져올 수 있으며 from 문장에만 사용할 수 있습니다.
    Python 3의 모듈 찾기 규칙:
  • 단순 모듈 이름import A은 검색sys.path 목록의 모든 디렉터리를 통해 찾을 수 있습니다.
  • 패키지는 __init__.py 파일이 있는 모듈 디렉터리로 A.B.C 문법을 사용할 수 있습니다.여기서 A 디렉토리는 sys.path 검색 경로에 있습니다.
  • 한 가방 안의 모듈 파일에서 일반적인 import 문장은 sys.path 검색 규칙을 사용한다.패키지 내의 모듈 파일이 앞에 점호가 있는 from 문장을 사용할 때, 패키지와 비교하면 가져옵니다.패키지 디렉터리만 검사하고 sys.path 일반적인 검색을 사용하지 않는다는 것이다.

  • 5 기타


    5.1 프롬*의 파괴 최소화


    변수 앞에 밑줄을 긋면 클라이언트가 from * 문장을 모듈에 가져올 때 변수 이름을 복사하는 것을 방지할 수 있습니다.모듈 맨 위에 변수 이름의 문자열 목록을 __all__ 변수에 값을 부여할 수도 있습니다.

    5.2 이름 문자열로 모듈 가져오기


    두 가지 방법으로 모듈의 문자열 이름을 사용하여 모듈을 가져올 수 있습니다.
  • 가져온 문장을 문자열로 구축하여 exec() 내장 함수에 전달한다.
  • 내장 함수__import__()를 사용합니다.
  • 좋은 웹페이지 즐겨찾기