파이썬 인터프리터를 닫고 다시 들어가면, 만들어 놓은 정의(변수나 함수)가 모두 지워집니다. 그래서 긴 프로그램을 짜려면, 파일 채로 넣어서 인터프리퍼에 넣어 출력할 수 있도록 문서 에디터를 이용합니다. 이런 과정을 '스크립트 작성'이라 합니다. 프로그램이 점점 길어지면, 몇개의 파일을 유지하기 쉽도록 하나의 파일로 보관하고 싶을 것입니다. 또한 각 프로그램에서 정의를 복사하지 않고 여러 프로그램에서 작성한 편리한 기능을 사용할 수도 있습니다.
이것을 지원하기 위해서, 파이썬은 정의를 파일에 넣고 인터프리터의 상호적인 개체나 스크립트에서 사용하는 기능을 지원합니다. 이런 파일들을 모듈(Modules)이라 부릅니다. 모듈에서 온 정의는 다른 모듈이나 메인 묘듈(최상위 레벨이나 계산 모드에서 실행되는 스크립트에 접근하는 변수들의 모임)에 입력될 수 있습니다.
모듈은 파이썬 정의나 구문을 포함한 파일입니다. 그 파일의 이름은 모듈의 이름이고 확장자로 .py 가 붙습니다. 모듈에서, 묘듈의 이름은 세계적인 변수인 ___name__의 값으로 사용됩니다. 예를 들어 아래의 fibo.py라는 파일을 당신이 가장 좋아하는 텍스트 에디터로 현재의 디렉터리에 만들 수 있습니다.
def f1(i):
a,b =0,1
while b < i:
print(b, end = ' ')
a, b = b, a+b
print()
def f2(i):
result = []
a, b = 0,1
while b < i:
result.append(b)
a, b = b, a+b
return result
>>> import fibo >>> fibo.f2(3) [1, 1, 2] >>> fibo.f1(3) 1 1 2 >>> fibo.__name__ 'fibo'
현재 심볼 테이블에 fibo로 정의된 함수의 이름을 직접 입력하지 않습니다. 모듈 이름 fibo만 입력하여 함수에 엑세스할 수 있습니다. 함수를 자주 사용하려는 경우, 로컬의 이름을 할당할 수도 있습니다. 모듈 이름이 import와 같이 쓰였을 때 처음 실행됩니다.
>>> fibo2 = fibo.f2 >>> fibo2(10) [1, 1, 2, 3, 5, 8]
모듈은 함수정의 뿐아니라 실행 구문을 포함할 수 있습니다. 구문은 모듈을 초기화하기 위한 것입니다.
각 모듈들은 정의된 모든 함수에 의해 세계 공통으로 사용하는 테이블로 사용되는 자신의 상징 테이블을 가집니다. 따라서 모듈의 저작자들은 사용자들의 공통 변수와 충돌이 발생하는 것을 걱정하지 않고 공통 변수를 사용할 수 있습니다.
반면에 자신의 일을 알고 있으면, 함수의 참조와 같은 표기법을 활용하여 모듈의 전역 변수를 만질 수 있습니다.
모듈은 다른 모듈에 포함되어 실행될 수 있습니다. 일반적으로 모듈의 시작 부분에서 모든 import문을 배치할 필요는 없습니다. 이 삽입된 모듈의 이름은 공통 상징 테이블 속에 있게 됩니다.
모듈의 이름을 모듈의 상징 테이블에서 직접 가져오는 import 구문의 변형문이 있습니다.
>>> from fibo import f1,f2
>>> f1(100)
1 1 2 3 5 8 13 21 34 55 89
삽입되는 모든 이름은 underscore(_)로 시작해서는 안됩니다. 대부분, 파이썬 프로그래머들은 이런 장치를 이용하지 않습니다. 이것이 인터프리터에서 이름의 알려지지 않은 세트(이미 정의한 것을 숨긴)를 소개할 때 쓰이기 때문입니다.
일반적으로 모듈이나 패키지에서 *를 삽입하는 실험은 잘 하지않습니다. 그것이 가독성이 낮은 코드를 만들기 때문입니다. 그러나 대화형 세션에서 타이핑을 저장하는데 쓸 수 있습니다.
모듈의 이름 뒤에 나오는 as는 그 모듈에 직접 바인딩 됩니다.
>>> import fibo as fib
>>> fib.f1(100)
1 1 2 3 5 8 13 21 34 55 89
이것은 import된 fibo를 fib으로 변형하여 사용할 수 있도록 해줍니다. from과 같이 쓸 수도 있습니다.
>>> from fibo import f1 as fib
>>> fib(100)
1 1 2 3 5 8 13 21 34 55 89
스크립트에서 묘듈 실행하기(Executing modules as scripts)
파이썬 모듈은 python ooo.py <arguments>의 코드를 이용해 실행합니다.
모듈을 임포트하면서 실행되기 하려면, __name__을 __main__으로 설정합니다.
아래의 코드를 앞의 fibo.py 코드의 끝에 추가하세요.
if __name__ == "__main__":
import sys
f1(int(sys.argv[1]))
이제 파일을 모듈로 삽입하듯이 사용할 수 있습니다. 모듈이 'main'을 실행되는 경우에만 명령구문을 분석하는 코드가 실행되기 때문입니다.
아래의 구문을 cmd에서 실행해보세요.
만약 모듈이 import만 되면 코드는 실행되지 않습니다.
이것은 종종 모듈이나 테스팅(모듈을 스크립트로 실행하여 테스트 단위 실행)을 위한 편리한 사용자 환경을 제공합니다.
spam이란 모듈이 실행되면, 인터프리터는 우선 그 이름의 내장 함수를 검색합니다. 찾지 못하면 sys.path로 정의된 디렉터리 안의 spam.py파일을 찾습니다. sys.path는 다음 위치에서 초기화됩니다.
- 삽입 스크립트(또는 특정한 파일이 없는 현재 디렉터리)를 포함하는 디렉터리
- PYTHONPATH(쉘 변수 PATH와 같은 이름을 가진 디렉터리 이름의 리스트)
- 설치 의존 고정값