지난 포스팅부터 파이썬 모듈에 대해 공부를 시작했습니다.
모듈의 개념과 만드는 방법과 불러오는 방법에 대해 공부했었는데요
이번 포스팅에서는 __name__ 변수 와 if __name__ == “__main__”: 가 어떤 의미인지 알아보도록 하겠습니다.
- 48. 파이썬 – 모듈의 정의 그리고 모듈 만들기와 모듈 불러오기
- 47. 파이썬 – 클래스 변수
- 1. 파이썬(Python) 입문부터 이론과 실행환경 구축 – 비주얼스튜디오코드(Visual Studio Code)
파이썬 모듈
if __name__ == “__main__”: 이 뭘까?
지난 포스팅에서 만들어 봤던 module1.py 파일을 아래처럼 변경해 보았습니다.
# module1.py
def add(x, y):
return x + y
def subtrack(x, y):
return x - y
print(add(1, 4))
print(subtrack(4, 2))
add(1, 4) 와 subtrack(4, 2) 의 결과를 print 문을 통해 출력하는 문장을 추가했습니다.
이제 아래처럼 module1.py 파일을 실행해 보겠습니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python module1.py
5
2
당연히 예상한 대로 print 문을 통한 add 와 subtrack 함수의 결과값이 잘 출력이 되었습니다.
그럼 이전 포스팅에서 처럼 파이썬 대화형 인터프리터에서 module1.py 파일을 실행을 해보겠습니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module1
5
2
>>>
이상하죠?
import module1 을 실행하는 순간 module1.py 파일이 실행되어 결과값을 출력을 하게 됩니다.
원래 목적은 module1.py 파일의 add 함수와 subtrack 함수를 사용하려고 하는 목적인데 말이죠
이런 문제를 방지하기 위해 module1.py 파일을 아래 코드처럼 변경해야 합니다.
# module1.py
def add(x, y):
return x + y
def subtrack(x, y):
return x - y
if __name__ == "__main__":
print(add(1, 4))
print(subtrack(4, 2))
if __name__ == “__main__”: 이라는 문장을 사용하게 되면
이전에 명령 프롬프트에서 python module1.py 라고 실행했을 때와 마찬가지로 __name__ == “__main__” 이 문장이 참이 되어 if 문 다음 문장이 수행이 됩니다.
반대로 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용을 하게 될 때에는 __name__ == “__main__” 이 거짓이 되어 if 문 다음에 있는 문장들이 수행이 되지 않게 됩니다.
위 코드처럼 module1.py 를 수정을 했으면 대화형 인터프리터를 열고 실행을 해보겠습니다.
>>> import module1
>>>
이제 아무런 결과값도 출력하지 않습니다.
name 변수? __name__ 변수란?
파이썬에서 사용하는 __name__ 변수는 파이썬이 내부적으로 사용하는 특별한 변수 이름입니다.
만일 명령프롬프트에서 python module1.py 라고 직접 module1.py 파일을 실행하는 경우에 module1.py 의 __name__ 변수에는 __main__ 이라는 값이 저장이 됩니다.
그러나 파이썬 쉘이나 다른 파이썬 모듈에서 module1 을 import 하는 경우에는 module1.py 의 __name__ 변수에는 module1.py 의 모듈 이름값인 module1 이 저장이 되게 됩니다.
>>> import module1
>>> module1.__name__
'module1'
>>>
- 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
