python main

백승찬·2020년 10월 26일
0

python

목록 보기
7/10

파이썬의 메인 함수

if __name__ == "__main__"

결론적으로 위의 의미는 메인 함수의 선언, 시작을 의미

코드 예시

# baek.py

def main():
    # python 3에서는 print() 으로 사용합니다.
    print "Main Function"

if __name__ == "__main__":
	main()

실행 결과

$ python baek.py
$ Main Function 

반대로 메인 함수가 없을 경우

다른 모듈을 불러온다고 가정하면
기능은 단순히 덧셈 결과를 반환합니다.

# baekModule.py

def add(x, y):
	return x + y

터미널에서 python을 실행하여 모듈을 직접 import하여 사용

# python 실행
>>> import baekModule
>>> print (baekModule.add(2, 3))
5 

기대한 결과값인 5가 정상적으로 출력
모듈만 별도로 확인하기 위해서 print 함수를 추가 그리고 실행

# baekModule.py

def add(x, y):
	return x + y
    
print(add(3,4))

출력 결과

$ python baekModule.py
$ 7

실행 기대한 값이 정상적으로 나오는 것을 확인

하지만 모듈을 직접 실행하는 것이 아닌 import 하는 경우

# python3 실행
>>> import baekModule
7

import만 했을 뿐인데 baekModule.py의 코드가 수행되어 결과값을 출력 하게됨 단순히 baekModule의 add 함수만 사용했을 뿐인데 값이 정해져 나오게 됨

이와 같은 문제를 해결하려면 baekModule.py파일의 코드를 변경하면 됩니다.

# baekModule.py

def add(x, y):
	return x + y
    
# 이 부분을 추가
if __name__ == "__main__":
	print(add(3,4))

함수만 정의 되고 값이 출력 되지 않는다

이부분을 이해하려면 네임스페이스의 개념을 알아야한다

namespace

네임스페이스란 프로그래밍 언어에서 특정한 객체를 이름에 따라 구분할 수있는 범위를 의미

파이썬 내부의 모든 것은 객체로 구성되며 이들 각가은 특정 이름과의 매핑 관계를 갖게 된는 데 이 매핑을 포함하고 있는 공간이 네임스페이스

네임스페이스가 필요한 이유

프로그래밍을 수행하다보면 모든 변수 이름과 함수 이름을 정하는 것이 중요한데 이들 모두를 겹치지 않게 정하는 것은 사실상 불가능

따라서 프로그래밍언어에서는 네임스페이스라는 개념을 도입하여, 특정한 하나의 이름이 통용될 수 있는 범위를 제한한다. 즉, 소속된 네임스페이스가 다르다면 같은 이름이 다른 개체를 가리키도록 하는 것이 가능해진다.

파이썬의 네임스페이스는 3가지로 분류

  • 전역 네임스페이스 : 모듈별로 존재하며, 모듈 전체에서 통용 될수 있는 이름들이 소속
  • 지역 네임스페이스 : 함수 및 메서드 별로 존재하며, 함수 내의 지역 변수들의 이름들이 소속
  • 빌트인 네임스페이스 : 기본 내장 함수 및 기본 예외들의 이름들이 소속된다. 파이썬으로 작성된 모든 코드 범위가 포함
네임스페이스

네임스페이스의 특징

  • 네임스페이스는 딕셔너리 형태로 구현
  • 모든 이름 자체는 문자열로 되어있고 각각은 해당 네임스페이스의 범위에서 실제 객체를 가리킨다
  • 이름과 실제 객체 사이의 매핑은 가변적(Mutable)이므로 런타임동안 새로운 이름이 추가
  • 빌트인 네임스페이스는 함부로 추가하거나 삭제 할 수 없다
    namespace

파이썬의 변수 스코프

만약 새로운 함수가 실행된다면 그 함수의 지역 이름들을 포함하는 새로운 스코프가 생겨서 중첩되게 된다. 또한 현재 변수의 이름이 참조하는 객체가 무엇인지를 검색하는 경우에는 가장 내부의 지역 네임스페이스부터 검색해 나가며 그 다음에는 보다 바깥에 있는 지역 네임스페이스를, 그리고 마지막에는 전역 네임스페이스를 검색한 이후에 최종적으로 빌트인 네임스페이스를 검색하게 된다.

예시)

def outer_func():
    a = 20
    def inner_func():
        a = 30
        print("a = %d" % a)
    
    inner_func()
    print("a = %d" % a)

a = 10
outer_func()
print("a = %d" % a)

>>> 출력값
a = 30
a = 20
a = 10

0개의 댓글