
if __name__ == '__main__':
코드
# in hello.py
print('hello 모듈 시작')
print('hello.py __name__:', __name__) # __name__ 변수 출력
print('hello 모듈 끝')
# in main.py
import hello # hello 모듈을 가져옴
print('main.py __name__:', __name__) # __name__ 변수 출력
# 실행 결과
hello 모듈 시작
hello.py __name__: hello
hello 모듈 끝
main.py __name__: __main__
hello.py 파일과 main.py 파일의 __name__ 변수 값이 출력import로 모듈을 가져오면 해당 스크립트 파일이 한 번 실행hello 모듈을 가져오면 hello.py 안의 코드가 실행됨hello.py의 __name__ 변수에는 'hello'가 들어가고, main.py의 __name__ 변수에는 '__main__'이 들어감
__name__은 모듈의 이름이 저장되는 변수이며 import로 모듈을 가져왔을 때 모듈의 이름이 들어감'__main__'이 들어감__name__과 __main__을 헷갈리지 말 것 주의main.py 파일을 실행C:\project>python main.py
hello 모듈 시작
hello.py __name__: hello
hello 모듈 끝
main.py __name__: __main__
main.py와 같이 파이썬으로 스크립트 파일을 직접 실행hello.py 파일의 __name__ 변수에는 'hello' 그리고 main.py 파일의 __name__ 변수에는 '__main__'이 들어감
hello.py 파일을 실행해보면 결과가 조금 달라짐C:\project>python hello.py
hello 모듈 시작
hello.py __name__: __main__
hello 모듈 끝
hello.py 파일의 __name__ 변수에는 'hello'가 아니라 '__main__'이 들어감__name__에는 '__main__'이 들어감
__name__ 변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단if __name__ == '__main__':처럼 __name__ 변수의 값이 '__main__'인지 확인하는 코드는 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업# in calc.py
def add(a, b):
return a + b
def mul(a, b):
return a * b
if __name__ == '__main__': # 프로그램의 시작점일 때만 아래 코드 실행
print(add(10, 20))
print(mul(10, 20))
# 실행 결과
30
200
calc.py와 같이 파이썬 인터프리터로 실행하면 10, 20의 합과 곱이 출력됨if __name__ == '__main__': 아래의 코드가 실행됨calc.py를 모듈로 사용하면 어떨까?>>> import calc
>>>
__name__ 변수의 값이 '__main__'일 때만 10, 20의 합과 곱을 출력하도록 만들었기 때문calc.add, calc.mul처럼 함수만 사용하는 것이 목적이므로 10, 20의 합과 곱을 출력하는 코드는 필요가 없음calc.add와 calc.mul 함수에 원하는 값을 넣어서 사용하면 됨Tip! 추가 내용
- 파이썬은 왜 프로그램의 시작점이 정해져 있지 않나요?
- 파이썬이 처음에 개발 될 당시에는 리눅스/유닉스에서 사용하는 스크립트 언어 기반이었기 때문에 프로그램의 시작점이 따로 정해져 있지 않았음
- 보통 리눅스/유닉스의 스크립트 파일은 파일 한 개로 이루어진 경우가 많은데, 이 스크립트 파일 자체가 하나의 프로그램이다 보니 시작점이 따로 필요하지 않음
- 하지만 C 언어나 자바 같은 언어는 처음 만들어질 때부터 소스 파일을 여러 개 사용했기 때문에 여러 소스 파일의 함수들 중에서도 시작 함수(main)를 따로 정해 놓았음
Tip! 추가 내용
__name__ 의 정체__name__이라는 변수는 파이썬에서 정한 "이미 있는" 변수function1.py이면 function1이 __name__이 됨__name__ 변수에 담기는 것은 그 파일 혹은, 모듈의 이름이 아니고 __main__이라는 값이 되도록 정해져 있음import_function1.py)에서 function1.py라는 모듈을 import해서 가지고 와서 사용하는 경우에는 __name__ 변수에 그 모듈의 이름이 담김