반응형

파이썬 코드를 보면 다음과 같은 코드를 자주 보게 됩니다.

if __name__ == "__main__":

 

__name__이란 모듈(module)의 이름(파일 이름)을 저장하는 파이썬의 내장 변수 입니다.
__main__ 은 최상위 모듈, 즉 현재 실행되는 스크립트를 나타내는 이름입니다. 파일의 이름과 상관없이 제일 처음 실행되는 파일의 모듈 이름은 __main__입니다.
따라서 위의 코드는 모들의 이름이 __main__이면, 즉 if문의 조건이 참(True)이면 if문에 코딩한 내용을 실행하게 됩니다.
즉 현재 스크립트로 실행되는지, 아니면 다름 스크립트의 모듈로 임포트되어 사용되는지를 판단하는 데 사용됩니다.

 

예제를 통해 자세히 알아 보겠습니다.

#  woo.py

def add(a, b):
    print('이 함수는 woo모듈의 add함수 입니다.')
    return a + b
    
# __name__ 변수 출력
print('모듈 이름:', __name__) 

# 이 모듈이 최상위 모듈이면 add( )함수를 실행
if __name__ == '__main__':
    print(add(1, 2))

'''
( 실행 결과 )
$ python woo.py
모듈 이름: __main__
이 함수는 woo모듈의 add함수 입니다.
3
'''

현재 woo.py 모듈만 있고, 따라서 이 모듈이 main이기 때문에 if문 안에 있는 foo( )함수가 실행됩니다.

 

이제 다른 모듈에서 woo모듈을 호출해서 사용해 보겠습니다.

#  boo.py

import woo # woo모듈을 가져 옵니다.

# __name__ 변수 출력
print('모듈 이름:', __name__) 

def sub(a, b):
    print('이 함수는 boo모듈의 sub함수 입니다.')
    return a - b

if __name__ == "__main__": # 이 파일이 시작점일 때만 아래 코드를 실행
    print(woo.add(5, 2))
    print(sub(5, 2))

'''
( 실행 결과 )
$ python boo.py
모듈 이름: woo
모듈 이름: __main__
이 함수는 woo모듈의 add함수 입니다.
7
이 함수는 boo모듈의 sub함수 입니다.
3
'''

woo.py는 boo.py에 import해서 사용하기 때문에 더이상 __main__이 아닙니다.

따라서 모듈이름 woo가 출력됩니다.

반면 지금 실행한 boo.py는 최상위 모듈이기 때문에 모듈 이름은 __main__으로 출력됩니다.

그리고 if문의 조건이 만족하기 때문에 woo.add( )와 sub( )함수 모두 실행 됩니다.

 

__name__ 과 __main__

반응형
블로그 이미지

DeveloperN

개발자 n의 개발 이야기(draft)

,