보리차
[파이썬] 스크립트와 모듈 본문
스크립트 : 실제로 프로그램을 작동시키는 코드를 담은, 실행 용도의 파일
모듈 : 프로그램에 필요한 변수들이나 함수들을 정의해 놓은, 임포트 용도의 파일
스크립트와 모듈은 실행 여부에 나뉜 것이지 파일 자체에 특별한 차이가 있는 것은 아니다. 따라서 어떤 파일은 모듈이 될 수도 있고 스크립트가 될 수도 있다.
그런데 예를 들어 모듈 파일에 테스트 코드를 추가하게 되면 이 모듈을 임포트할 때 테스트 코드도 함께 출력되는 문제가 발생하게 된다.
area.py
PI = 3.14
# 원의 면적을 구해 주는 함수
def circle(radius):
return PI * radius * radius
# 정사각형의 면적을 구해 주는 함수
def square(length):
return length * length
# circle 함수 테스트
print(circle(2) == 12.56)
이 문제를 해결하기 위해서는 __name__(던더바 네임) 이라는 특수 변수를 사용하면 된다. ( __ 는 던더바(더블언더바)라고 읽는다. )
name 특수 변수
__name__은 모듈의 이름을 저장해 놓은 변수이다.
- 파일을 직접 실행하면 __name__은 __main__으로 설정된다.
- 파일을 임포트하면 __name__은 모듈 이름으로 설정된다.
__name__을 사용하면 파일이 직접 실행되냐 혹은 임포트 되냐에 따라서 코드의 흐름을 제어할 수 있다.
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)
# square 함수 테스트
print(square(5) == 25)
+) __name__을 이용하면 JAVA나 C++에서의 main( ) 함수와 같은 형태를 만들어 줄 수 있다.
run.py
import area
# 면적 계산기 프로그램
def main():
x = float(input('원의 지름을 입력해 주세요: '))
print('지름이 {}인 원의 면적은 {}입니다.\n'.format(x, area.circle(x)))
y = float(input('정사각형의 변의 길이를 입력해 주세요: '))
print('변의 길이가 {}인 정사각형의 면적은 {}입니다.'.format(y, area.square(y)))
if __name__ == '__main__':
main()
main( ) 함수를 사용하면 파일에서 프로그램을 작동시키는 코드가 어디인지 알 수 있기 때문에 코드의 가독성이 올라가게 된다.
'파이썬' 카테고리의 다른 글
[파이썬] __init__ (0) | 2021.06.03 |
---|---|
[파이썬] 패키지 (0) | 2021.05.27 |
[파이썬] 모듈 검색 경로 (0) | 2021.05.24 |
[파이썬] 네임스페이스(namespace) (0) | 2021.05.24 |
[파이썬] 모듈 (0) | 2021.05.24 |