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__
변수에 그 모듈의 이름이 담김