Hello Computer Vision

__name__ == '__main__' 쓰는 이유 본문

딥러닝/파이토치

__name__ == '__main__' 쓰는 이유

지웅쓰 2023. 12. 21. 16:06

파이썬 코드들을 보면은 많은 코드들에서 if __name__ == '__main__': 이라는 것을 발견할 수 있다. 물론 많은 분들이 이에 대해 작성해놓았지만 안잊어버리기 위해 적어놓으려고 한다.

 

우선 __name__ 은 파이썬에 내장되어 있는 변수라고 할 수 있다. 해당 변수는 만약 파일이 interpreter통해 수행된다면(해당 파일이 직접적으로 수행된다면) __main__ 이라는 변수가 되는 거고 만약 다른 파일로부터 import 되서 수행된다면 해당 파일의 이름으로 변수가 저장된다.

예시를 통해 알아보는 것이 제일 빠르다.

def print_test():
    if __name__ == '__main__':
        print('interpreter 통해 직접 출력')
    else:
        print('해당 파일 import 해서 출력')
        print(__name__)

위 코드는 test.py 파일에 작성되어있는 코드들이다. 살펴보자면 만약 test 파일을 직접 수행하면 if문이 수행될 것이고 다른 파일에서 import 되서 수행된다면 아래 코드가 수행될 것이다.

 

import test

test.print_test()

if __name__ == '__main__':
    print('test2.py 수행')
print(__name__)

아래 코드는 test2.py 에 작성되어있는 코드들이다.  test2 파일을 직접 수행해보겠다.

해당 파일 import 해서 출력
test
test2.py 수행
__main__

 

먼저 test파일에 있는 print_test() 함수를 출력시도했고, 함수안에 있는 내용이 출력된다. 그러나 test2 파일을 통해 출력한 것이므로 else 아래에 작성되어 있는 코드가 수행되고, test 파일 안에 있는 __name__변수가 출력되었는데 이는 test 값으로 들어가있음을 알 수 있다.

그리고 test2 파일을 직접수행했으므로 test2.py 수행 이라는 문구가 출력되고 마지막으로 __name__ 변수를 출력해보면 main 임을 알 수 있다.

 

결론: __name__ == '__main__' 을 사용하는 이유를 단순히 말하자면 해당 모듈 및 파일을 다른 곳에서 수행되었을 때 불필요한 수행을 막을 수 있으며 다른 파일에서 import 했을 때 재사용하기 쉽다(만약 import했을 때 모든 것을 다시 수행한다면 더 많은 부분으로 세분화해서 쪼개야할 것 같다)