[파이썬] Python __name__ == ‘__main__’의 왜 사용할까?

[파이썬] Python __name__ == ‘__main__’의 왜 사용할까?

파이썬 언어 개발시 IDE툴 중에서 파이참(PyCharm) 툴을 사용하여 프로젝트 생성시 아래와 같은 main.py 샘플 스크립트를 함께 생성할 수 있습니다. 아래 코드 스니펫을 보면 if절 조건문에 __name__ == ‘__main__’ 와 같은 조건이 있습니다.

# This is a sample Python script.

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.


def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    print_hi('PyCharm')

# See PyCharm help at https://www.jetbrains.com/help/pycharm/

파이썬 __name__ 변수는 모듈의 이름을 출력합니다.

즉 실행되는 모듈의 이름이 저장되는 변수이며import로 모듈을 가져왔을 때 모듈의 이름이 들어갑니다. 

파이썬 인터프리터(interpreter)로 스크립트 파일을 직접 실행했을 때는 모듈의 이름이 아니라 ‘__main__’이 들어갑니다.

이해를 돕기 위해 아래 코드를 참고해볼까요?

custompackage패키지를 하나 만들었습니다. 그리고 이 패키지 안에 calclulator.py 모듈과 autoprint.py모듈을 추가하였습니다. 그리고 main.py 모듈에서 custompackage패키지에 추가된 모듈 2개를 import 한 후 실행해보았습니다.

#calclulator.py

def calplus(a, b):
    return a + b


def calminus(a, b):
    return a - b


if __name__ == '__main__':
    print("calculator.py 직접 실행됨 : __name__ ->", __name__)
else:
    print("calculator.py import로 호출됨 : __name__ ->", __name__)

#autoprint.py

def print_name():
    print("autoprint.print_name(): __name__ ->", __name__)

#main.py

import custompackage.autoprint
import custompackage.calculator


def print_hi(name):
    print(f'Hi, {name}')


if __name__ == '__main__':
    print("main.py 직접 실행됨 : __name__ ->", __name__)
else:
    print("main.py import로 호출됨 : __name__ ->", __name__)
    
    
a = 10
b = 20
custompackage.calculator.calplus(a, b)
custompackage.autoprint.print_name()

[main.py 실행결과]

C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/main.py
calculator.py import로 호출됨 : __name__ -> custompackage.calculator
main.py 직접 실행됨 : __name__ -> __main__
calclulator.calplus: __name__ -> custompackage.calculator
autoprint.print_name(): __name__ -> custompackage.autoprint

감이 오시나요??

calculator.py를 import가 아닌 직접 실행을 해보겠습니다.

C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/custompackage/calculator.py
calculator.py 직접 실행됨 : __name__ -> __main__

이제 확실히 이해가 되시죠??

파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없습니다.

어떤 스크립트 파일이든 시작점도 될 수 있고, 모듈도 될 수 있습니다.

그래서__name__변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단합니다.

파이썬 __name__ == ‘__main__’ 사용하는 이유

if __name__ == ‘__main__’와 같은 조건을 사용하는 이유는 스크립트 파일이 메인 프로그램으로 사용될 때와 모듈로 사용될 때를 구분하기 위한 용도입니다.


카테고리의 다른 글
error: Content is protected !!