반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
Tags
- 유학생
- 영국석사
- 로지스틱회귀
- 코드잇
- 선형회귀
- 다항회귀
- 파이썬
- Seaborn
- 코딩
- 데이터분석
- 윈도우함수
- 판다스
- 오늘도코드잇
- 경사하강법
- 코딩독학
- for반복문
- 나혼자코딩
- 결정트리
- SQL
- 코딩공부
- sql연습문제
- HTML
- 런던
- matplotlib
- 코드잇TIL
- 행렬
- numpy
- 머신러닝
- 코드잇 TIL
- CSS
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(파이썬) 모듈과 스크립트의 차이점 총정리 본문
728x90
반응형
1. 모듈
- 모듈은 여러 기능을 모아둔 파이썬 파일입니다.
- 예를 들어, 평면도형의 면적을 구해주는 함수들을 모아서 area라는 모듈을 만들겠습니다.
PI = 3.14
# 원의 면적을 구해 주는 함수
def circle(radius):
return PI * radius * radius
# 정사각형의 면적을 구해 주는 함수
def square(length):
return length * length
- 모듈은 파일 이름에서 .py 확장자를 빼고 부릅니다.
2. 모듈 임포트(import)
- 모듈에 저장된 기능을 가져다 쓰기 위해서는 모듈을 임포트(import)하면 됩니다.
- 모듈을 임포트하는 방법에는 여러 가지가 있습니다.
1) import <module>
- 모듈 전체를 임포트합니다. 모듈 안에 있는 변수 또는 함수는 .으로 접근할 수 있습니다.
import area
print(area.circle(2))
print(area.PI)
2) from <module> import <member(s)>
- 모듈에서 필요한 것만 임포트 합니다. 불러온 변수나 함수를 접근할 때 앞에 module.을 붙이지 않습니다.
from area import circle, square
print(circle(2))
print(square(3))
3) from <module> import *
- 모듈에 있는 모든 것을 임포트 합니다.
from area import *
print(PI)
print(circle(2))
print(square(3))
- 그런에 이 임포트 방식을 사용하면 어떤 함수가 어떤 모듈에서 왔는지 알 수가 없습니다.
- 그래서 이 방식은 파이썬 커뮤니티에서 권장하지 않는 방식입니다.
- 모듈을 사용할 때는 모듈을 그대로 가져오거나 모듈에서 필요한 것들만 가져오는 것이 좋습니다.
4) as 키워드
- 임포트 문 뒤에 as 라는 키워드를 붙여서 임포트하는 것의 이름을 바꿔줄 수 있습니다.
# 모듈 이름을 바꿈
import area as ar
print(ar.circle(2))
# 함수 이름을 바꿈
from area import square as sq
print(sq(3))
3. 스크립트 vs 모듈
- 스크립트는 실제로 프로그램을 작동시키는 코드를 담은 실행 용도의 파일을 뜻합니다.
- 모듈은 프로그램에 필요한 변수들이나 함수들을 정의해 놓은 임포트 용도의 파일을 뜻합니다.
- 예를 들어, 아래에 면적 계산기 프로그램은 두 파일로 구성되어 있습니다.
<area.py>
# 원의 면적을 구해 주는 함수
def circle(radius):
return PI * radius * radius
# 정사각형의 면적을 구해 주는 함수
def square(length):
return length * length
- area 파일에서는 프로그램에 필요한 함수들을 정의하기만 하고 함수들을 사용하지는 않습니다.
<run.py>
x = float(input('원의 지름을 입력해 주세요: '))
print('지름이 {}인 원의 면적은 {}입니다.\n'.format(x, area.circle(x)))
y = float(input('정사각형의 변의 길이를 입력해 주세요: '))
print('변의 길이가 {}인 정사각형의 면적은 {}입니다.'.format(y, area.square(y)))
<area.py>
PI = 3.14
# 원의 면적을 구해 주는 함수
def circle(radius):
return PI * radius * radius
# 정사각형의 면적을 구해 주는 함수
def square(length):
return length * length
# circle 함수 테스트
print(circle(2) == 12.56)
print(circle(5) == 78.5)
# square 함수 테스트
print(square(2) == 4)
print(square(5) == 25)
- 하지만 여기서 문제가 생기는데 그건 area 모듈을 임포트해도 위 테스트 코드가 실행된다는 것입니다.
- 모듈을 임포트하면 모듈 안에 있는 코드가 처음부터 끝까지 모두 실행되기 때문입니다.
- 이 문제를 해결하기 위해서는 __name__이라는 특수 변수를 사용해야 합니다.
4. name 특수 변수
1) name 의 뜻
- __name__ 은 모듈의 이름을 저장해놓은 변수입니다.
- __name__ 의 값은 파이썬이 알아서 정해줍니다.
- 파일을 직접 실행하면 __name__은 __main__ 으로 설정됩니다.
- 파일을 임포트하면 __name__은 모듈 이름으로 설정됩니다.
- 예를 들어, area 파일에서 __name__을 아래 처럼 출력해보면
<area.py>
print(__name__)
- area 파일을 직접 실행할 경우 __main__ 이라고 나오고
__main__
- area 파일을 임포트 할 경우 area라고 나오게 됩니다.
area
2) if __name__ == '__main__'
- __name__을 사용하면 파일이 직접 실행되냐 아니면 임포트되냐에 따라서 코드의 흐름을 제어할 수 있습니다.
- 파일이 직접 실행될 때만 실행하고 싶은 코드는 if __name__ == '__main__' 이라는 조건문 안에 넣어주면 됩니다.
<area.py>
PI = 3.14
# 원의 면적을 구해 주는 함수
def circle(radius):
return PI * radius * radius
# 정사각형의 면적을 구해 주는 함수
def square(length):
return length * length
if __name__ == '__main__':
# circle 함수 테스트
print(circle(2) == 12.56)
print(circle(5) == 78.4)
# square 함수 테스트
print(square(2) == 4)
print(square(5) == 25)
- area 파일을 직접 실행시키면 파일의 __name__ 은 __main__ 이 되기 때문에 조건문 안에 있는 코드가 실행되지만 area 파일을 임포트하면 __name__은 area가 되기 때문에 조건문 안에 코드가 실행되지 않습니다.
- 따라서 area 파일을 모듈처럼 쓸 수 있고 스크립트 처럼 쓸 수도 있게 되는 것입니다.
728x90
반응형
'코딩공부 > Python' 카테고리의 다른 글
(파이썬) 서브 패키지 (0) | 2024.06.18 |
---|---|
(파이썬) 패키지의 개념과 임포트(import)하는 여러 가지 방법, init 파일, all 특수 변수 총정리 (0) | 2024.06.16 |
(파이썬) NumPy 부울 값 인덱싱, 집합 연산, np.sort() 정렬 (1) | 2024.06.14 |
(파이썬) NumPy 슬라이싱 및 복사, 대각 요소 추출, 고유한 값 리턴하기 (1) | 2024.06.14 |
(파이썬) NumPy, ndarray의 요소에 액세스하고 요소 삭제/삽입하기 (0) | 2024.06.12 |