파이썬 인터프리터는 파이썬 스크립트가 실행될 때 __name__ 과 같은 스페셜한 변수들에게 값을 할당합니다.
아래와 같은 my_module.py 라는 스크립트를 작성해 볼께요.
# my_module.py
def my_name():
print('J Builder')
if __name__ == '__main__':
my_name()
이 스크립트를 파이썬 인터프리터가 실행을 하면 __name__ 변수에 '__main__' 이라는 문자열값이 할당이 됩니다.
➜ python_test python my_module.py
J Builder
그럼 질문이 하나 생길텐데요. 아래 test_module.py처럼 그냥 if __name__ == '__main__': 구문 없이 my_name() 함수를 호출하면 안될까요?
# test_module.py
def print_name():
print('Test')
print_name()
답은, 당연히 됩니다.
➜ python_test python test_module.py
Test
그럼 왜 if __name__ == '__main__': 구문을 사용하는 것일까요?
그것은 어떤 스크립트가 다른 스크립트의 모듈로 import 될 때 필요하기 때문입니다.
예를 들어서 아래처럼 your_module.py 가 있다고 해볼께요. 그리고 my_module.py를 import 해보겠습니다.
# your_module.py
from my_module import my_name
def your_name():
print('Awesome')
if __name__ == '__main__':
your_name()
my_name()
이 스크립트를 실행하면 의도한대로 your_name()이 호출되고 my_name()이 호출이 됩니다.
➜ python_test python your_module.py
Awesome
J Builder
하지만 if __name__ == '__main__': 구문이 없었던 test_module.py를 import하면 어떻게 될까요?
# your_module2.py
from test_module import print_name
def your_name():
print('Awesome')
if __name__ == '__main__':
your_name()
print_name()
결과는 의도한 바와 다르게 print_name()이 두번 호출되었습니다. 즉, test_module을 import할 때 test_module.py의 마지막에 적었던 print_name()이 호출이 된것입니다.
➜ python_test python your_module2.py
Test
Awesome
Test
즉, 스크립트를 실행할 때는 수행이 되지만 다른 스크립트에서 import 될 때는 수행이 안되길 원하는 코드를 if __name__ == '__main__': 블럭안에 작성하여 사용할 수 있습니다.
'파이썬 > 자주하는 질문' 카테고리의 다른 글
파이썬(Python) 외부 프로그램 실행하기 (0) | 2020.09.11 |
---|---|
파이썬(Python) yield 키워드 이해하기 (0) | 2020.09.11 |
파이썬(Python) 문자열을 in-place로 수정하는 방법 (0) | 2020.09.10 |
파이썬(Python) 2진수 10진수로 변환하기 (2) | 2020.09.10 |
파이썬(Python) 8진수 16진수 정수 표현하기 (0) | 2020.09.10 |
댓글