[Python 스크립트 파일의 실행]
python은 C언어나 Java 와 달리 main() 함수가 존재하지 않는다.
이에 따라 스크립트 파일을 실행하게 되면 들여쓰기가 되지 않은 line들을 파일 상단 부터 순차적으로 읽어 수행하게 된다.
[sample.py]
a = 1
b = 3
c = a + b
print(c)
def temp():
print("abc")
~/python$ python sample.py
4
위에서 보듯이 들여쓰여진 코드인 함수 부분은 수행되지 않았음을 볼 수 있다.
[다른 Python 스크립트 파일을 모듈로서 실행]
python 스크립트 파일은 또 다른 python 스크립트 파일을 하나의 모듈로써 읽어 들일 수 있다.
[sample_call.py]
import sample
~/python$ python sample_call.py
4
import 만 해도 import 한 python 스크립트 파일이 수행되는 것을 확인할 수 있다.
import 시 무조건 수행되는 것을 방지 하기 위해 함수로 구현하여 해당 함수만 호출할 수도 있다.
[__name__] 의 의미
if __name__ == __main__ 의 의미를 알아보기에 앞서 __name__의 의미는 다음과 같다.
모듈의 이름
상기의 코드를 조금 수정해 아래와 같이 수행해보면 다음과 같다.
[sample_call_mod.py]
import sample
print(sample.__name__)
호출한 모듈의 전역 변수인 __name__ 을 출력해 보면 해당 모듈의 이름을 확인할 수 있다.
import sample as sp
print(sp.__name__)
위와 같이 as 로 alias를 해도 sp.__name__을 출력해 보면 원래 이름인 sample 로 표시되는 것을 확인할 수 있다.
[if __name__ == __main__ 의 의미]
__name__ 은 모듈의 이름을 표시하는 전역 변수라는 것을 알았는데, 그렇다면 if ___name__ == __main__ 은 어떤 경우일까. 모듈 이름이 __main__ 인 경우인 것인가.
__name__ 이 __main__ 인 경우는 조금 특별한 경우로 모듈이 다른 코드로 부터 import 되어 사용되는 상황이 아니라 바로 실행되는 경우에 가지게 되는 값이다.
즉, 위에서 sample_call_mod.py가 sample.py를 호출하였을 때는 sample.__name__ 은 sample 이었지만 sample.py를 직접 바로 실행하게 되면 __main__ 을 가지게 된다.
[sample_main.py]
print(__name__)
~/python$ python sample_main.py
__main__
즉, 스크립트 파일을 직접 실행할 경우에만 코드를 수행되게 만들려면..
if __name__ == __main__: 조건 아래에 들여쓰기를 해서 작성하면 되는 것이다.
이와 같은 코드를 통해 C언어나 Java 에서와 같은 main() 함수의 역할을 할 수 있게 된다.
'Language > Python' 카테고리의 다른 글
Python - 지능형 리스트 (List Comprehension)/제너레이터 표현식 (Generator expression) 의 이해 및 비교 (0) | 2019.09.13 |
---|---|
Python - random(), 임의의 수(난수)를 구하는 함수 (0) | 2019.03.20 |
Python - Python 2 에서 Python 3 으로의 전환 (0) | 2019.03.19 |
Python - id(), object의 unique 값(memory address)를 보여주는 함수 (0) | 2019.03.18 |
Python - package와 module의 차이 (0) | 2018.06.16 |
Python - datetime/time module, 현재 시간 출력 방법 (0) | 2018.06.16 |
Python - email package, raw email message 다루기 (0) | 2018.06.15 |
Python - poplib, POP3 를 통한 이메일 수신 (0) | 2018.06.15 |