module 모듈이란?
모듈 module란 함수나 변수 또는 클래스를 모아 놓은 파일을 말한다.
module은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이라고 할 수 있다.
복잡도를 낮추는 편리하고 중요한 기능으로,
연관되어 있는 것들을 하나의 이름으로 묶음으로써 복잡한 상황의 복잡도를 낮춰주는 걸 모듈(module)이라 한다.
다른 사람들이 이미 만들어 놓은 모듈을 사용하거나, 모듈을 직접 만들어서 사용할 수도 있다.
내장 모듈
## 내장모듈
import math # math라는 이름의 모듈을 가져온다.
math.ceil(2.6) # 올림 : 2.6보다 큰 정수를 가져옴
math.floor(2.7) # 내림 : 2.7보다 작은 정수를 가져옴
math.sqrt(16) # 루트 : 16의 루트 값을 가져옴
math라는 python 내장 모듈을 가져온다.
ceil(올림), floor(내림), sqrt(루트)는 math라는 module에 포함되어있는 함수들이다.
모듈이 없을 때 & 모듈이 있을 때
## 모듈이 없을 때
def kim_a():
return 'a'
# 매우 많은 코드
#~~~
# 매우 많은 코드
def lala_a():
return 'B' # 뒤에 정의된 a()값으로 정의되어 a()의 결과값이 바뀜
# 프로젝트 복잡도 상승 -> solution?? 정리정돈/이름변형 -> 중복/덮어쓰기 문제 해결
# 매우 많은 코드
print(lala_a())
모듈이 없을 때나 코드가 매우 많을 때, 함수의 중복/이름겹침 등의 문제가 발생할 수 있다.
프로젝트 복잡도를 낮추고 문제를 예방하기 위해
정리정돈 / 이름변형의 방법으로 예방할 수 있다.
하지만 이름을 변형만하게되면 지저분하고 알아보기 힘든 코드로 바뀔 수 있다.
2가지 입장에서의 해결방법?
1) 주어진 프로그래밍 언어를 이용하는 사람 : 이름변형으로 충돌 회피
2) 프로그래밍 언어 자체를 제작 : 근본적인 대책이 필요 -> module
모듈의 도입
modules.py
from egoing import a # modules_egoing라는 모듈로부터 a라는 함수를 import 한다.
import k8800 # modules_egoing, k8800이라는 py 파일을 찾음
print(egoing.a())
print(egoing.b())
print(k8800.a())
from egoing import a
: egoing.py에서 만든 모듈에서 함수 a()를 import 한다.
import k8800
: k8800.py라는 파일을 찾고 import 한다.
print(egoing.a()) : egoing.py에서 a() 함수의 결과값을 print 한다.
print(egoing.b()) : egoing.py에서 b() 함수의 결과값을 print 한다.
print(k8800.a()) : k8800.py에서 만든 a()함수의 결과값을 print 한다.
egoing.py
def a():
return 'a'
def b():
return 'b'
def c():
return 'c'
egoing.py 파일 안에는 함수(def) a(), b(), c() 3개의 함수가 있다.
각자 함수는 각자 다른 결과값을 반환한다.
a() = 'a'
b() = 'b'
c() = 'c'
k8800.py
def a():
return 'B'
k8800.py 파일 안에는 함수(def) a()가 있다.
k8800.py의 함수 a()는 'B'라는 결과값을 반환한다.
로그인 애플리케이션
auth_modules.py : auth.py의 login() 모듈을 불러와 실행
auth.py : login 모듈
auth_modules.py
import auth
input_id = input("아이디를 입력하세요. \n")
if auth.login(input_id):
print('Hello' + input_id)
else:
print('who are you?')
import auth : auth.py을 불러온다.
input_id : 아이디를 입력한다.
if auth.login(input_id): # login 모듈에서 member = input_id가 일치한다면, ['Hello' + input_id]를 print 한다.
print('Hello' + input_id)
else:
print('who are you?') # login 모듈에서 member = input_id가 불일치한다면, [who are you?]를 print 한다.
### login module
def login(_id):
members = ['kim', 'gong', 'lee']
for member in members:
if member == _id:
return True
return False
login 모듈
members = ['kim', 'gong', 'lee'] # members list를 가지고 있다.
for member in members: # members의 member를 반복한다.
if member == _id # 멤버와 입력 id가 같다면
return True # True 값을 리턴한다.
return False # for ~ in 반복문이 다 돌때까지 True 값이 없다면 False를 반환한다.
__name__ = "__main__"
# mod1.py
# 곱하기
def multiply(a,b):
return a*b
# 빼기
def subtract(a,b):
return a-b
print(multiply(5, 4))
print(subtract(6, 4))
곱하기, 빼기 기능이 있는 함수를 사용하기 위해 import mod1을 수행하면
함수만 입력되는 게 아닌, 결과값까지 출력한다.
위와 같은 상황을 예방하기 위해 if __name__ = "__main__"을 사용한다.
if __name__ = "__main__"을 사용하면
C:\Users> python mod1.py처럼 직접 파일을 실행할 경우,
__name__ = "__main__"이 참이 되어 if문 다음 문장을 수행한다.
대화형 인터프리터, 다른 파일에서 import 등 모듈을 불러서 사용할 경우,
__name__ = "__main__"이 거짓이 되어 if문 다음 문장을 수행하지 않는다.
※ __name__변수란?
__name__ 변수는 python에서 내부적으로 사용되는 특별한 변수의 이름이다.
python mod1.py 처럼 직접 mod1.py파일을 실행하면, __name__ 변수에 __main__값이 저장된다.
하지만 python shell이나 다른 python module에서 import 할 경우,
mod1.py의 __name__변수에는 mod1.py의 모듈이름 값인 mod1이 저장되게 된다.
'python' 카테고리의 다른 글
pyhthon - 인캡슐레이션Encapsulation(캡슐화) (0) | 2022.04.28 |
---|---|
python - 객체 지향 프로그래밍(Object Oriented Programming) (0) | 2022.04.27 |
python - function 함수란 무엇인가? (0) | 2022.04.27 |
python - 반복문(loop) 활용& 컨테이너(container) (0) | 2022.04.27 |
python - 반복문(loop) while, for (0) | 2022.04.27 |
댓글