if __name__ == "__main__"은 왜쓰나요?

조회수 58782회

밑의 코드에서 if __name__ == ""__main__""은 왜 쓰는건가요?

소스코드

if __name__ == ""__main__""
    print ""hello""

1 답변

  • 좋아요

    12

    싫어요
    채택 취소하기

    스크립트가 파이썬 인터프리터 명령어로 패싱되어 실행되면(python myscript.py같이) 다른 언어들과는 다르게, 파이썬은 자동으로 실행되는 메인함수가 없습니다. 파이썬은 메인 함수가 없는 대신 들여쓰기 하지 않은 모든 코드(level 0코드)를 실행합니다 다만, 함수나 클래스는 정의되었지만, 실행되지는 않습니다

    질문하신 경우, 최 상위 코드는 if 블록이고, __name__은 현재 모듈의 이름을 담고있는 내장 변수입니다. python myscript.py 같이 이 모듈이 직접 실행되는 경우에만,__name__ 은 "__main__"으로 설정됩니다.

    따라서 질문자의 코드가 다른 모듈에 의해 import된 경우 함수와 객체의 정의는 import되지만 __name__"__main__"이 아니기 때문에 if문은 실행되지 않습니다.

    이처럼,

    if __name__ == "__main__":
    

    을 써서, 스크립트가 직접 실행되는지 혹은 import되어 실행되는지 테스트 할 수 있습니다.

    예를들어 다음 코드의 경우

    file A.py

    def func():
        print("function A.py")
    
    print("top-level A.py")
    
    if __name__ == "__main__":
        print("A.py 직접 실행")
    else:
        print("A.py가 임포트되어 사용됨")
    

    file B.py

    import A as one
    
    print(""top-level in B.py"")
    one.func()
    
    if __name__ == "__main__":
        print("B.py가 직접 실행")
    else:
        print("B.py가 임포트되어 사용됨")
    
    >> python A.py
    top-level in A.py
    A.py가 직접 실행
    
    
    >>python B.py
    top-level in A.py
    A.py가 임포트되어 사용됨
    top-level in B.py
    function A.py
    B.py가 직접 실행
    
    • 깔끔하고 상세한 설명 감사합니다. 잘 배우고 갑니다. 중간에 "if문은 실행되지 않습니다"라는 설명은, if문은 최상위 레벨 코드이므로 실행은 되지만 __name__ == "__main__"이 거짓이므로 if 블록 안의 하위 구문은 실행되지 않는다는 설명이 더 정확할 것 같습니다. 여기까지 오신 분이라면 그정도는 알아보시겠지만 말입니다 =) 알 수 없는 사용자 2019.5.16 05:59
    • 유용한 정보 감사합니다. yeji0407 2020.7.22 17:33

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)