[Python] name & main

1 분 소요

__name__

def main():
    print('file name: who_are_you.py')
    print('__name__: {0}'.format(__name__))

main()
file name: Who_are_you.py
__name__:__main__

파이썬 스크립트 파일을 실행하면 자동으로 생성되는 변수로 __name__이라는 것이 있다. 위 코드를 보면 변수 __name__이 만들어졌고 거기에 문자열 ‘__main__‘이 담겨있다.

import who_are_you
print('play importer')
print('__name__: {0}'.format(__name__))
file name: who_are_you.py
__name__: who_are_you
play importer
__name__:__main__

파이썬은 파일별로 각각 변수 __name__을 만든다. 위 코드에서 알 수 있는 사실은 실행이 시작되는 스크립트 파일의 __name__에는 문자열 ‘__main__‘을 채운다. import 되는 스크립트 파일의 __name__에는 파일 이름을 문자열로 채운다.

이러한 특징을 바탕으로 하나의 스크립트 파일을 두가지 목적으로 사용할 수 있다.

if __name__ == ‘__main__’

파이썬 스크립트 파일에 담기는 내용은 두가지로 나눌 수 있다.

  1. 직접 실행할 내용이거나
  2. 다른 스크립트 파일에서 사용하도록 만든 내용이거나
def add(n1, n2):
    return n1 + n2

def main(): # 이 파일을 import 하면 main함수도 정의됨
    print(add(3, 4))
    print(add(5, 9))

main() # 이 파일을 import 하면 이문장에 의해 main함수도 실행
7
14

만약 위 파일을 import 했다면 add 함수를 가져다 쓰는 것이 목적일 텐데 의도치 않게 main 함수가 실행된다. 결국은 필요하다면 다른 파일에서 이 파일을 import해서 add 함수를 호출할 수 있게 만들고, 이 파일을 직접 실행해서 main함수가 호출되도록 해야한다.

def add(n1, n2):
    return n1 + n2

if __name__ == '__main__':
    def main():   # if 조건이 True인 경우에만 main 함수 정의
        print(add(3, 4))
        print(add(5, 9))

    main() # if 조건이 True인 경우에만 main 함수 호출
7
14
import adder2 as ad

def divide(n1, n2):
    return n1 / n2

def main():
    print(divide(4, 2))
    print(divide(9, 3))
    print(ad.add(2, 3))

main()
2.0
3.0
5

위 코드처럼 작성하면 adder2.py의 main함수정의와 호출은 실행되지 않으니 가져다 쓰는데 전혀 문제가 없다.