if __name__ == "__main__":
//코드
//코드
__name__
excuteThisModule.py
모듈//excuteThisModule.pydef func():
print("function working")
if __name__ == "__main__":
print("직접 실행")
print(__name__)
else:
print("임포트되어 사용됨")
print(__name__)
이 모듈을 실행할 수 있는 방법은 두 가지:
python3 executeThisMoudle.py
import executeThisMoudle.py
executeThisMoudle.func()
1처럼 인터프리터에서 직접 실행하면, __name__
변수에 “__main__”
이 담겨서 프린트됨
직접실행
__main__
__name__
변수에 “executeThisModule”
이 담겨서 프린트됨임포트되어 사용됨
executeThisModule
__name__ == __main__
은 인터프리터에서 직접 실행했을 경우에만 if문 내의 코드를 돌리라는 명령이 된다!# 코드 - C
int sum(int num1, int num2) {
return num1 + num2;
}
int main() {
printf("%d", sum(1, 1));
return 0;
}
# 코드 - Python
def sum(num1, num2)
return num1 + num2
print(sum(1, 1))
__name__
내장변수__name__
__name__
attribute must be set to the fully-qualified name of the module. This name is used to uniquely identify the module in the import system.__main__
이라는 값을 가지게 됨# hello.py
print('hello 모듈 시작')
print('hello.py __name__:', __name__) # __name__ 변수 출력
print('hello 모듈 끝')
# main.py
import hello # hello 모듈을 가져옴
print('main.py __name__:', __name__) # __name__ 변수 출력
# 실행결과
hello 모듈 시작
hello.py __name__: hello
hello 모듈 끝
main.py __name__: __main__
__name__
변수에는 'hello'(import된 모듈은 모듈의 이름(파일명))가 들어가고, main.py의 __name__
변수에는 __main__
이 들어감어떤 스크립트 파일이든 파이썬 인터프리터가 최초로 실행한 스크립트 파일의
__name__
에는__main__
이 들어간다. 이는 프로그램의 시작점(entry point)이라는 뜻이다.
파이썬의 코드 실행방식과 연관되어 파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없다. 어떤 스크립트 파일이든 시작점도 될 수 있고, 모듈도 될 수 있다. 그래서__name__
변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단한다.
if __name__=="__main__"
이해하기# calc.py
def add(a, b):
return a + b
def mul(a, b):
return a * b
if __name__ == '__main__': # 프로그램의 시작점일 때만 아래 코드 실행
print(add(10, 20))
print(mul(10, 20))
# 실행결과
30
200
if __name__ == '__main__':
아래의 코드가 실행됨>>> import calc
>>>
>>> calc.add(50, 60)
110
>>> calc.mul(50, 60)
3000
if __name__ == '__main__':
처럼__name__
변수의 값이__main__
인지 확인하는 코드는 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업이다.
즉, 스크립트 파일이 메인 프로그램으로 사용될 때와 모듈로 사용될 때를 구분하기 위한 용도!
쉽게 생각하면 모듈에if __name__=='__main__'
이라는 조건문을 넣어주고 그 아래는 직접 실행시켰을 때만 실행되길 원하는 코드들을 넣어주는 것으로 생각하면 쉬울 것이다.