본문 바로가기
  • hazard_dev@__
  • hazard_dev@__
Python

Python__module__은 찍어먹는건가요?[1]

by Hazard3_o00sung 2020. 2. 14.
728x90

본 포스트는 Python 3.7기반_ 으로 작성되었음을 알려드립니다.

 

Python__module__은 찍어먹는건가요?[1]

 

파이썬(python 이하, 파이썬)은 객체지향 프로그래밍 언어로써 고급언어에 속하며 요즘은 머신러닝 후광을 보고있는 인기가 많은 언어 중 하나입니다. 포스팅 하는 필자 또한 python p/g를 제일 좋아합니다 ㅎㅎㅎ

 

그중에서도 필자가 겪었던 헷갈림? 어려움? 을 중심으로 하여 포스팅을 해보고자 합니다. 어차피 겪는 어려움은 모두가 비슷할겁니다!

 

자, 그럼 파이썬에서의 '__name__'이란 과연 무었일까요?

우선 위 모듈을 알기전에 스택과 활성화 레코드 그리고 함수에 대해서 간략히 집고 넘어갑니다.

 

 

 

사용자가 작성한 코드에서 함수가 호출될 때마다 활성화 레코드(activation record)가 생성됩니다. 함수의 정보 등이 기록되어있으며, 이는 스택(stack)에 저장됩니다.

 

다음과 같은 프로세스를 거쳐 저장됩니다.

 

 

 

 

1. 함수의 실제 매개변수를 스택에 저장(push)

2. 반환 주소를 스택에 저장

3. 스택의 최상위 인덱스를 함수의 지역변수에 필요한 총량만큼 늘린다.

4. 함수로 건너뛴다.

 

풀어내는 절차는 역순으로 생각하시면 됩니다.

 

함수는 프로그래밍을 해보셨던 분이라면 알다시피 특정 부분을 실행시키는 코드블럭입니다.

 

 

1

2

3

4

5

def add(a,b):

    return a+b #add함수로 전달된 두 인자의 합을 리턴

if __name__ == '__main__':

    print(add(3,4))

cs

 

 

 

파이썬은 모듈을 임포트 할때마다 __name__이라는 변수를 만들고 그안에 모듈의 이름 등을 저장합니다.

 

 

 

그렇다면 __name__변수에 대한 예제를 확인해볼까요?

 

 

 

1

2

3

4

5

6

7

8

9

10

11

_hello = "hello"

def world():

    return world

if __name__ =='__main__':

    print("{0} run".format(__name__))

else:

    print("{0} import".format(__name__))

Colored by Color Scripter

 

 

 

 

 

cs

 

 

위 코드를 복사하여 본인이 사용하는 idle에 test.py라는 이름으로 붙여넣고 저장해주세요~

그런다음 직접 import test 를 하여 확인해보면 파이썬은 __name__을 __main__으로 설정하였으므로, 위 코드 조건에 맞는 코드를 실행시킵니다.

 

 

 

 

만약 test.py를 직접 실행시킨다면 9번째 코드가 아닌 7번째 코드를 실행 시킨다는 말과 동일합니다. 

 

 

궁금하신 사항 댓글 달아주시면 보고 포스팅 진행 해보도록 하겠습니다~

 

읽어주셔서 감사합니다~

 

 

 

 

728x90

댓글