Python

[Python] if __name__ == '__main__'

비번변경 2022. 8. 21. 21:15

개요

Python 코드를 보다 보면 아래와 같은 부분을 발견하게 된다.

if __name__ == '__main__':
    ...

이 글에서는 이 코드에 대한 의미와 왜 사용하는지에 대해 정리하려고 한다.

 

 

__name__

모듈의 이름이 저장되는 변수로 import로 모듈을 가져왔을 때는 모듈의 이름이 들어간다. 하지만 모듈을 직접 실행하면 __main__이 들어간다.

 

예시로 아래와 같은 plus 함수를 가진 calc 모듈이 있다고 하자. 그리고 이 모듈을 직접 또는 import해 실행하여 __name__ 변수를 출력해보았다.

def plus(*args):
    return sum(args)


print(f"__name__ : {__name__}")

 

직접 실행한 경우

__main__

import 한 경우

import calc

print(calc.plus(3, 5))

import 한 경우 모듈 이름

__name__ 변수의 값이 모듈의 이름과 동일하다는 것을 확인할 수 있다. 또한 plus 함수만을 호출했음에도 함수 밖의 소스가 실행된 것을 확인할 수 있다.

 

Python의 특징 중 하나가 main 함수가 존재하지 않는다는 것이다. 어떤 스크립트 파일이든 프로그램의 시작점이 될 수 있다. 시작점이 되는 스크립트 파일과 모듈인 파일 간에 차이가 없기 때문에 __name__ 변수의 값을 통해 스크립트 파일이 직접 실행되어 시작점에 해당하는지, 모듈로 사용되고 있는지를 구분한다.

 

 

if __name__ == '__main__':

__name__의 값이 '__main__' 일 때를 뜻하는 조건문으로, 파이썬 스크립트 파일이 직접 실행되었을 때만 조건문 아래의 코드를 실행하라는 뜻이다. 일종의 메인 함수 선언이라고 이해할 수 있다.

 

위에서 테스트한 calc 모듈의 __name__ 변수 출력 부분을 조건문 아래에서 실행되도록 수정했다.

def plus(*args):
    return sum(args)


if __name__ == '__main__':
    print(f"__name__ : {__name__}")

 

직접 실행하면 여전히 __name__ 변수 값이 출력되지만, 

조건문 추가 후 직접 실행

import 해서 실행한 경우에는 더 이상 __name__ 변수 값이 출력되지 않는다.

조건문 추가 후 import 실행 시

 

즉, if __name__ == '__main__':을 통해 그 자체로 기능을 수행하면서 다른 모듈에서 필요한 함수 등을 제공할 수 있도록 하는 코드를 작성할 수 있다.

 

 

참고 문서

https://dojang.io/mod/page/view.php?id=2448 

https://hyoje420.tistory.com/45

 

[Python]if __name__ == "__main__"

파이썬의 모듈에 아래와 같은 코드가 존재할 때가 있다. <코드> if __name__=="__main__" 그대로 해석해보면 '__name__이라는 변수의 값이 __main__이라면 아래의 코드를 실행하라.'라는 뜻이다. 위 글을 이

hyoje420.tistory.com