모듈
함수, 변수, 클래스를 모아놓은 파일
기능단위로 만든파일(라이브러리)
파일의 이름이 모듈의 이름이 된다.
다른 사용자가 만들어 놓은 모듈을 사용할 수 있고, 사용자가 직접 만들어서 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | def add(a,b): return a+b def sub(a,b): return a-b def mul(a,b): return a*b def div(a,b): return a/b |
1 2 3 4 5 6 | import calculator print(calculator.add(10,5)) print(calculator.sub(10,5)) print(calculator.mul(10,5)) print(calculator.div(10,5)) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import calculator # 1 print(calculator.add(10,5)) print(calculator.sub(10,5)) print(calculator.mul(10,5)) print(calculator.div(10,5)) import calculator as c # 2 print(c.add(10,5)) print(c.sub(10,5)) print(c.mul(10,5)) print(c.div(10,5)) from calculator import * # 3 print(calculator.add(10,5)) print(calculator.sub(10,5)) print(calculator.mul(10,5)) print(calculator.div(10,5)) from calculator import add,sub # 4 print(calculator.add(10,5)) print(calculator.sub(10,5)) |
#1 import 모듈이름
- import뒤에 모듈명을 붙이는 것!
#2 import 모듈이름 as 변경이름
- import뒤에 모듈명을 붙이고, 그 뒤에 as를 사용하므로써 밑에 프린트문의 내용을 더 간결하게 할 수 있다. 위의 예제처럼!
#3 from 모듈이름 import *
from절 뒤에 모듈이 따라오고 import뒤에 변수 또는 함수가 따라온다. 에스크립터*는 내가 사용하는 모듈에 있는 모든 변수,함수,클래스를 사용하겠다는 뜻!
#4 from 모듈이름 import 특정변수,함수,클래스
- 3번에 에스크립트가 아닌 import뒤에 변수명,함수명,클래스명을 쓰면 내가 원하는 것들만 임포트하여 쓸 수 있다.
모듈을 사용하려면 sys.path 안에 있는 경로에 모듈파일을 두어야 사용할 수 있다. 만약 내가 C드라이브에서 바로 쓰고싶은데 경로에 없다면 C드라이브 경로를 추가해주면 된다.
모듈경로확인
import sys
sys.path
경로를 추가해주는 방법
import sys == 일단 sys모듈을 임포트 시켜준다.
sys.path.append("새로운 경로") == 새로운 경로를 추가
구분자를 \\로 사용해야 한다.
for i in sys.path:
print(i) 해보면 경로에 새로운 경로도 있을것이다. 모듈을 이제 새로운경로 위에 두어도 사용할 수 있다.!
내장 전역변수 __name__ 에 대해 소개하겠다.
print('name:{}'.format(__name__) 을 실행해보면
name:__main__ 이라고 결과가 나온다.
최상위 수준으로 실행되는 모듈을 메인모듈이라고 한다면, 이 메인 모듈이 import 문을 이용하여 불러오는 모듈은 하위 모듈 이라고 한다. 하위모듈의 __name__ 변수는 메인 모듈에서와는 달리 모듈 자체의 이름을 담고 있다.
sub.py 파일에 다음과 같이 작성한다.
print("hi")
print("one two three")
그 후, main.py에는 sub.py를 import하여 똑같이 작성한다.
import calculator
print("hi")
print("one two three")
출력하면 어떻게 나올것인지 예상이 되는가 ?
hi
one two three
hi
one two three
위 처럼 두번이 찍혀 나온다. sub.py의 코드를 최상위 수준일 때만 실행되도록 하고 싶을 때에는 어떻게 해야하는가
바로 최상위 수준일 때__name__변수가 '__main__'으로 지정되는 것을 이용하는 것이다.
if __name__ == '__main__ ':
print("hi")
print("one two three")
sub.py를 위처럼 바꾸고 다시 main.py를 실행해보면
hi
one two three
이렇게 나올 것이다. 최상위 수준으로 실행할 때가 아니면 실행되지 않기 때문에!
위의 구문 아래 문장은 모듈 파일 안에서만 수행된다. 외부에서는 import로 참조할 수 없다.
패키지
모듈을 디렉토리별로 모아두어야 꺼내쓰기 쉬운데 이렇게 모듈을 모아놓는 디렉토리를 패키지 라고 한다.
3.3버전 밑으로는 디렉토리마다 빈 파일의__init__.py 가 있어야 됐으나 이제는 있어도 없어도 상관없다. 나는 3.5를 쓰기 때문에!
__init__.py 해당 폴더가 패키지의 일부임을 알려주는 역할 3.3버전 부터 해당 파일이 없어도 인식 가능
'programming > Python' 카테고리의 다른 글
Python // 객체와 클래스 2 (0) | 2017.12.05 |
---|---|
Python // 객체와 클래스 (0) | 2017.12.01 |
Python // 함수 (0) | 2017.11.27 |
Python // 반복문 (0) | 2017.11.26 |
Python // 분기문 (0) | 2017.11.25 |