Python – 모듈(Module) 및 패키지(Package)

6029 단어 Python
본고의 대부분 내용은 랴오설봉 공식 사이트로 옮겨졌다

1. 모듈(Module)


컴퓨터 프로그램의 개발 과정에서 프로그램 코드를 많이 쓸수록 한 파일에서 코드가 점점 길어지고 유지하기가 점점 어려워진다.
유지보수 가능한 코드를 작성하기 위해 우리는 많은 함수를 그룹으로 나누어 각각 다른 파일에 넣는다. 그러면 모든 파일에 포함된 코드가 상대적으로 적고 많은 프로그래밍 언어가 이런 조직 코드를 채택한다.파이톤에서 .py 파일을 하나의 모듈(Module)이라고 부른다.
모듈을 사용하면 어떤 장점이 있습니까?
가장 큰 장점은 코드의 유지보수성을 크게 높였다는 것이다.그 다음으로 코드를 작성하는 데는 0부터 시작할 필요가 없다.하나의 모듈이 완성되면 다른 곳에서 인용될 수 있다.우리는 프로그램을 작성할 때도 파이톤에 내장된 모듈과 제3자로부터 온 모듈을 포함하여 다른 모듈을 자주 인용한다.
모듈을 사용하면 함수 이름과 변수 이름이 충돌하는 것을 피할 수 있다.같은 이름의 함수와 변수는 서로 다른 모듈에 완전히 존재할 수 있기 때문에 우리가 모듈을 작성할 때 이름이 다른 모듈과 충돌하는 것을 고려할 필요가 없다.그러나 내장 함수 이름과 충돌하지 않도록 주의해야 한다.
너는 다른 사람이 쓴 모듈 이름이 같으면 어떻게 해야 할지 생각할지도 모른다.파이톤은 모듈 이름 충돌을 피하기 위해 패키지(Package)라는 카탈로그별 모듈 구성 방법을 도입했다.
예를 들어 abc.py의 파일은 abc이라는 모듈이고 xyz.py의 파일은 xyz이라는 모듈이다.
현재 우리의 abcxyz 두 모듈의 이름이 다른 모듈과 충돌했다고 가정하면 우리는 가방을 통해 모듈을 조직하여 충돌을 피할 수 있다.방법은 mycompany과 같은 최상위 패키지 이름을 선택하여 다음 디렉토리에 저장합니다.
mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

가방을 도입한 후 맨 윗부분의 가방 이름이 다른 사람과 충돌하지 않는다면 모든 모듈은 다른 사람과 충돌하지 않는다.현재 abc.py 모듈의 이름은 mycompany.abc, 비슷한 xyz.py의 모듈 이름은 mycompany.xyz으로 바뀌었다.
모든 패키지 디렉터리 아래에 __init__.py의 파일이 있습니다. 이 파일은 반드시 존재해야 합니다. 그렇지 않으면 파이톤은 이 디렉터리를 패키지가 아닌 일반 디렉터리로 간주합니다.__init__.py은 빈 파일일 수도 있고 파이썬 코드가 있을 수도 있다. 왜냐하면 __init__.py은 그 자체가 하나의 모듈이고 그 모듈 이름은 mycompany이기 때문이다.
유사하게 다단계 디렉터리가 있어 다단계 패키지 구조를 구성할 수 있다.예를 들어 다음과 같은 디렉토리 구조입니다.
mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 └─ xyz.py

파일 www.py의 모듈 이름은 mycompany.web.www입니다.
Notes: 모듈을 만들 때 이름을 주의해야 합니다. Python이 가지고 있는 모듈 이름과 충돌할 수 없습니다.예를 들어 시스템이 자체로sys모듈을 가지고 있으면 자신의 모듈을sys라고 명명할 수 없다.py, 그렇지 않으면 시스템이 자체로 가지고 있는sys 모듈을 가져올 수 없습니다.

2. 모듈 사용


파이썬 자체에 매우 유용한 모듈이 많이 내장되어 있어 설치가 끝나면 바로 사용할 수 있다.
내장된 sys 모듈의 경우 hello 모듈을 작성합니다.
#!/usr/bin/env python3 
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():
    args = sys.argv   # argv               
    if len(args)==1:  #       1         
        print('Hello, world!')
    elif len(args)==2: #           
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()

첫 번째 줄과 두 번째 줄은 표준 주석이고, 첫 번째 줄의 주석은 이 Hello를 사용할 수 있다.py 파일은 Unix/Linux/Mac에서 직접 실행되며, 두 번째 줄은 주석으로 표시됩니다.py 파일 자체는 표준 UTF-8 인코딩을 사용합니다.
4행은 모듈의 문서 주석을 나타내는 문자열로 모든 모듈 코드의 첫 번째 문자열은 모듈의 문서 주석으로 간주된다.
6행은 __author__ 변수를 사용하여 작가를 적는다. 그러면 원본 코드를 공개한 후에 다른 사람들이 당신의 이름을 존경할 수 있다.
이상은 Python 모듈의 표준 파일 템플릿입니다. 물론 모두 삭제하고 쓰지 않을 수도 있지만 표준에 따라 일을 처리하는 것은 틀림없습니다.
뒤에서부터 진짜 코드 부분이야.sys 모듈을 사용하는 첫 번째 단계는 이 모듈을 가져오는 것입니다.
import sys
sys 모듈을 가져온 후 우리는 변수 sys이 이 모듈을 가리키며sys라는 변수를 이용하여sys모듈의 모든 기능에 접근할 수 있다.sys 모듈에는 argv 변수가 있는데 list으로 명령줄의 모든 파라미터를 저장했다.argv은 최소한 하나의 원소가 있는데, 왜냐하면 첫 번째 파라미터는 영원히 이렇기 때문이다.py 파일의 이름(예:python3 hello.py을 운행하여 얻은 sys.argv['hello.py']입니다. 여기 python3은 매개 변수가 아닙니다.python3 hello.py Michael을 운행해 얻은 sys.argv['hello.py', 'Michael]이다.
마지막으로 이 두 줄 코드에 주의하십시오.
if __name__=='__main__':
    test()

우리가 명령줄에서 hello 모듈 파일을 실행할 때 Python 해석기는 특수 변수 __name____main__으로 설정하고 다른 곳에서 이 hello 모듈을 가져오면 if 판단이 실패할 것이다. 따라서 이런 if 테스트는 한 모듈이 명령줄을 통과할 때 추가 코드를 실행할 수 있다. 가장 흔히 볼 수 있는 것은 실행 테스트이다.
우리는 명령줄로 hello.py을 실행하여 효과를 볼 수 있다.
$ python3 hello.py
Hello, world!
$ python hello.py Michael
Hello, Michael!

Python 상호 작용 환경을 시작하면 hello 모듈을 다시 가져옵니다.
>>> import hello
>>>

가져올 때 Hello, word!을 인쇄하지 않았습니다. test() 함수를 실행하지 않았기 때문입니다.hello.test()을 호출하면 Hello, word!을 인쇄할 수 있습니다.
>>> hello.test()
Hello, world!

좋은 웹페이지 즐겨찾기