티스토리 뷰

참고한 포스팅

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


if__name__="__main__"을 쓰는 이유는 다음과 같다.


파이썬 인터프리터 명령어로 패싱되어 실행되어 실행되면 다른 언어들과는 다르게,

파이썬은 자동으로 실행되는 메인함수가 없다.


파이썬은 메인 함수가 없는 대신 들여쓰기 하지 않는 모든 코드(level 0코드)를 실행한다.

다만, 함수나 클래스는 정의되었지만, 실행되지는 않는다.


예시를보면서 살펴보자


main.py와 sub.py를 만들어 테스트해보자


#sub.py


print("sub 모듈 시작")

print("sub.py의 __name__ : ", __name__)

print("sub 모듈 끝")


아래의 결과를 보면 sub.py 스크립트를 실행했으므로 __name__은 __main__이 된다.


sub 모듈 시작

sub.py의 __name__ :  __main__

sub 모듈 끝


이제 main.py에서 sub를 import해서 실행시켜보자


#main.py


import sub


print("main.py의 __name__ : ", __name__)


아래의 결과를 보면 sub.py 파일과 main.py 파일의 __name__ 변수 값이 출력된다.

파이썬에서 impor로 모듈을 가져오면 해당 스크립트 파일이 한번 실행된다.

따라서 sub 모듈을 가져오면 sub.py 안의 코드가 실행되며 __name__ 변수에는 'sub'가 들어있고, main.py의 __name__ 변수에는 '__main__'이 들어있다.


sub 모듈 시작

sub.py의 __name__ :  sub

sub 모듈 끝

main.py의 __name__ :  __main__


조금더 자세하게 알아보자


main.py

#main.py


def func():

    print("func main.py")


print("main.py 있는 곳")


if __name__ == "__main__":

    print("main.py 직접 실행")

    print("main.py의 __name__ : ", __name__)

else:

    print("main.py가 임포트되어 사용됨")


결과를 보면 main.py를 실행했을때 __name__은 main.py가 될것이다.

그렇다면

if__name__ == "__main__": <여기 if문에 걸리게 되므로 if문 안에 있는게 실행된다.

else: < 부분은 실행이 되지 않는다.

main.py 있는 곳

main.py 직접 실행

main.py의 __name__ :  __main__


이제 sub.py에서 아래 코드를 실행해보자


sub.py

#sub.py


import main


print("sub.py 있는 곳")

main.func()


if __name__ == "__main__":

    print("sub.py가 직접 실행")

    print("sub.py의 __name__ : ", __name__)

else:

    print("sub.py가 임포트되어 사용됨")


결과를 보면 main.py를 import를 했으므로 main.py가 실행되고 main.py에서 실행안하고 import 되었으므로 당연히 if문에 안걸리고

else문으로가서 main.py가 임포트되어 사용됨이 출력된다.

그리고 차례대로 sub.py 있는 곳 -> main함수의 func 출력 if문을 타게 된다.      


main.py 있는 곳

main.py가 임포트되어 사용됨

sub.py 있는 곳

func main.py

sub.py가 직접 실행

sub.py의 __name__ :  __main__







'python' 카테고리의 다른 글

[python] csv의 데이터를 DB insert  (4) 2018.11.05
[python] mat 파일 읽어드리기  (0) 2018.11.02
[python] 윈도우 아나콘다 설치  (0) 2018.11.02
댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31