01. 파이썬 쉘 상에서 실행된 모든 함수와 변수들은 쉘을 종료하는 순간 다시 사용할 수 없게 된다. 이렇게 작성된 함수나 변수를 계속 재활용하기 위하여 모듈(Module)의 개념이 도입되었다. 모듈은 재사용을 하고자하는 변수나 함수의 정의문들을 파일로 저장하여 특정 파이썬 파일이나 파이썬 쉘 환경에서 호출하여 사용할 수 있는 방법을 제시해준다.
ex) 변수 - pi(=3.141592), pow() ← 반드시 math 모듈을 import 해줘야한다!
Q. 그럼 내가 여태까지 py파일에다가 def또는 클래스, 함수를 정의해놓은게 모듈인건가? 나는 그냥 py파일 불러오기만 하면 실행 가능했는데...?
02. 이러한 모듈들을 특정 기준에 따라 모아 놓은 단위를 패키지(Pacakge)라고 한다.
03. 파이썬 내장함수들을 제외한 함수들은 파이썬 표준 라이브러리 안의 모듈에 구현이 되어있으며, 사용하기 위해서는 모듈을 반드시 미리 호출하여 해당 모듈을 파이썬 실행 환경에 import(탑재)해야한다.
04. 모듈은 파이썬으로 정의한 소스 코드를 담고 있는 파일, 즉 py 확장자로 끝난다
05. 이때 파일명은 모듈명이 된다.
Q. 파이참에서 피보나치 함수를 정의해서 저장했는데 임포트가 안된다...
→ 파이썬폴더(나의 경우는 \Python34)에 py파일을 저장하고 패스 설정한 다음에 콘솔에서 실행했더니 됬당. 그리고 참고로 임포트 후에 선언하는 방법이 헷갈렸었음
fibonacci(4) (X)
fibonacci.fibonacci(4) (O)
06. 만약 해당 함수가 빈번히 호출이 되어서 매번 모듈명을 호출하는 것이 번거롭다면 함수 자체를 변수에 할당하여 호출하는 것도 가능하다.
ex)
>>> fibo = fibonacci.fibonacci
>>> fibo(4)
1
1
2
3
or
>>> from fibonacci import fibonacci
>>> fibonacci(4)
1
1
2
3
07. 파이썬에서는 함수도 function이라는 이름의 클래스에 의해 생성된 객체라고 생각하자!
08. 모듈을 호출할 때에는 별칭(Alias)를 사용할 수가 있다. import할 모듈이나 함수명 옆에 as [별칭명]을 붙이면 된다.
ex)
>>> from fibonacci import fibonacci as f1
>>> f1(4)
1
1
2
3
09. import문 사용 시, 본인이 반드시 사용하고자 하는 함수를 명확하게 표기하여 추후에 문제가 생길 가능성을 처음부터 배제하고 소스코드를 읽는 사람으로 하여금 앞으로 작성할 소스코드의 의도를 밝히도록 하는 것이 import문을 잘 사용하는 방법!
10. import문 수행 이후에 해당 모듈 파일의 변경이 생긴다면 파이썬 번역기를 다시 시작해야 한다. 현재 상태에서 해당 모듈을 다시 로딩하고 싶다면 imp를 import한 후, imp.reload(모듈명) 를 해준다.
11. 이미 만들어진 모듈의 안을 들여다 보는 방법 : dir() 함수
12. __builtins__ : 파이썬의 내장 함수들을 가지고 있는 모듈, dir() 함수 호출시에는 내장 함수 리스트는 반환이 되지 않는다.
13. dir() 함수를 활용하면 파이썬 쉘 상에서는 현재까지 정의되어 사용하고 있는 변수나 함수 등을 확인할 수 있으며 import한 모듈명까지 쉽게 확인할 수 있다. import한 모듈의 내부를 확인하고 싶을 때에도 요긴하게 사용이 된다.
14. 패키지는 관련 깊은 소스코드들을 모아서 알아보기 쉽게 하고, 관리 및 유지보수 역시 쉽게 하기 위함.(일반적으로 패키지들을 나눌 때에는 소스 코드의 사용 목적에 따라서 나누는 것이 현명하다.)
15. from문 없이 import문만 사용하는 경우에는 마지막 항목이 모듈이나 패키지가 되어야 한다. 클래스나 함수 혹은 변수가 올 수 없으니 주의!
15.
'공부 > Python' 카테고리의 다른 글
[Python]Chapter12 입/출력(input/output) 그리고 로깅(logging) (0) | 2017.01.23 |
---|---|
[Python]Chapter11 정규식(실습프로젝트 2) (0) | 2017.01.22 |
[Python]Chapter03 프로그래밍의 기본 (0) | 2017.01.20 |
[Python]Study Day2(1월 16일) (0) | 2017.01.16 |
[Python]Chapter09 Class (0) | 2017.01.15 |