일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Google Excel
- PySpark
- Excel
- GIT
- numpy
- django
- matplotlib
- google apps script
- Mac
- Redshift
- Apache
- array
- 파이썬
- Kotlin
- Google Spreadsheet
- Tkinter
- dataframe
- PANDAS
- Github
- math
- string
- Python
- gas
- list
- c#
- PostgreSQL
- hive
- SQL
- Java
- Today
- Total
달나라 노트
Python Basic : __name__ (직접 실행/패키지 실행 구분하기) 본문
python의 내장변수 중 __name__이라는 변수는 해당 python 파일을 직접 실행시키는지 library로 import해서 실행시키는지에 따라 값이 달라집니다.
직접 실행할 경우 -> __name__ == '__main__'
library로 import되어 실행된 경우 -> __name__ == '파일명'
# name_test.py
print(__name__)
-- Result
__main__
name_test.py 파일을 직접 실행한 경우 __name__이라는 내장변수에는 __main__이라는 값이 저장됩니다.
위 예시의 결과에서 알수있죠.
# final.py
import name_test
-- Result
name_test
final.py 에서 test.py를 import했습니다.
그리고 final.py를 실행시키면 name_test라는 텍스트가 출력됩니다.
import를 하는 순간 name_test가 한번 실행된것이고,
name_test.py에 있는 print(__name__) 구문이 실행되면서 name_test라는 텍스트가 출력되었다고 볼 수 있습니다.
따라서 name_test.py가 import된 채로 실행되면 name_test.py의 내장변수 __name__에는 해당 파일의 이름이 저장된다는걸 알 수 있죠.
좀 더 확실하게 보기 위해 코드를 약간 바꿔봅시다.
name_test.py
if __name__ == '__main__':
print('__name__ : {}'.format(__name__))
print('name_test.py is executed by itself.')
elif __name__ == 'name_test':
print('__name__ : {}'.format(__name__))
print('name_test.py is imported in another file.')
-- Result
__name__ : __main__
name_test.py is executed by itself.
name_test.py 파일의 코드를 위처럼 바꿨고,
name_test.py를 직접 실행하면 __name__ == '__main__' 조건이 True가 되면서 if에 있는 코드블록이 실행됩니다.
# final.py
import name_test
-- Result
__name__ : name_test
name_test.py is imported in another file.
이번에도 name_test.py을 final.py에서 import해봅시다.
이때 name_test의 __name__ 변수는 import되었으므로 __name__ 변수에는 파일명인 name_test라는 값이 저장됩니다.
따라서 name_test.py의 if가 아닌 elif에 있는 코드블록이 실행되죠.
# name_test.py
-- Result
# final.py
import name_test
print(__name__) # --> final.py의 __name__ 변수값 출력
print(name_test.__name__) # --> name_test.py의 __name__ 변수값 출력
-- Result
__main__
name_test
위 예시는 test.py를 그냥 공백으로 두고 final.py에서 test.py를 import한 것입니다.
그리고 final.py에서는 final.py의 __name__변수와 name_test.py의 __name__ 변수값을 출력하고있죠.
final.py가 직접 실행되었으므로 final.py의 __name__ 변수는 __main__으로 출력되고,
name_test.py는 import되었으므로 name_test.py의 __name__ 변수(name_test.__name__)는 파일명(name_test)으로 출력되는걸 볼 수 있습니다.
# name_test.py
...
if __name__ == '__main__':
# something you want to run
__name__ 내장변수는 보통 위와 같은 조건을 사용해서
python 파일이 직접 실행될때만 발동되는 코드블록을 만들 때 사용됩니다.