if __name__ == “__main__”: (확장)

강경훈·2021년 2월 21일
2
post-thumbnail

지난 TIL#50에 if name == “main”: 에 관해 간단히 정리한 적이 있었다.
단순히 script test을 위한 code라고 생각했지만, 이번에 직접 작성한 모듈을 main script에 import하는 과정에서 겪은 작은 오류를 겪으면서 python에서 모듈을 import하는 방식에 대해 공부해 보았다.
TIL #50 Python - (name == 'main')

잘못 이해하고 있던 점

  • 모듈을 import하면 해당 모듈에서 정의한 함수, 클래스, 변수들만 가져와 사용한다.
  • 모듈을 import했을 때 실행 모듈에서 필요한 것만 가져 온다고 생각.

겪은 작은 오류

  • 모듈을 import 할 때 모듈에 작성한 print가 실행 됨
  • if name == “main”: 을 추가하여 문제 해결

오류의 원인

import는 실제로 import한 파일에 실행 가능한 코드를 모두 실행 시킨다, 즉 print, input 같은 실행 가능한 모든 코드가 실행 된다.

  • main.py
  • python shell

if __name__ == “__main__”:

  • __name__
    python 스크립트의 이름을 저장하고 있는 내장 변수
>>> print(test.py.__name__) 
>>> test
  • '__main__'
    실제 실행 되고 있는 파이썬 스크립트의 이름. 즉, import되서 사용되고 있는 파일이 아닌 직접 실행되고 있을 때 파일의 이름
>>> print(__name__) 
>>> __main__
  • if __name__ == '__main__':

  • import 되지 않고, 직접 실행 할 때만 if가 true가 되어 if 아래 코드 실행
    -직접 실행 할 때만 if 아래의 코드가 실행 되므로 import 되어 함수들이 사용 될 때 실제 돌아가고 있는 코드에 영향 없음

  • 직접 실행되는 파일이 아닌 함수들을 모아놓은 파일에서 함수를 테스트 할 때 사용 할 수 있음

  • main.py

  • python shell

느낀점

  • 단순히 테스트 목적이 아닌, 모듈이 실행 할 때 불피요한 코드 실행을 막기 위해 사용한다는 것을 알았다.
  • 불필요한 코드를 막는다는 것을 활용하여 테스트를 진행 할 수 있는 것이었다.
  • TIL로 한 번 정리 했던 내용인데, 한 번 정리 할 때 조금 더 깊이 생각하고 정리 할 필요성을 느꼈다.(두 번 일하는 느낌..)

참고
https://stackoverflow.com/questions/419163/what-does-if-name-main-do

profile
방랑하는 개발자

0개의 댓글