이전의 포스트에서 모듈이 무엇이고, 어떻게 호출하고 사용하는지 알아보았다.
Python-8. Module이란? / 모듈의 기본 사용법(import, from)
프로그래머가 처음부터 끝까지 프로그램의 모든 것을 작성하기에는 굉장히 어렵고 시간이 오래걸리는 일이다. 그렇다면, 미리 자주 사용되는 함수와 같은 기능들을 수학공식 만들 듯 미리 작성
dot-learning.tistory.com
그렇다면, 나만의 모듈을 만들고 사용할 수 있을까?
당연히 가능하다. 이제 어떻게 그렇게 하는지 알아보자.
.py 파일과 모듈
아이들의 실행경로에 있는 .py파일들은 모두 모듈의 형태로 임포트할 수 있다.
(실행경로에 관한 내용은 파일을 다루는 포스트에서 더 자세히 알아보자. 일단, 여기서 말하는 실행경로란 순정상태의 파이썬에서 newfile을 통해 .py파일을 작성하고 저장할 때, 기본으로 지정되는 파일의 위치라고 생각하면 된다.)
예를 들어 다음과 같은 plusminus.py 파일을 작성한다고 해보자.
def plus(a,b) :
return(a+b)
def minus(a,b) :
return(a-b)
이 파일을 아이들의 실행경로에 저장했다면 이 파일을 아이들에서 모듈의 형태로 임포트할 수 있다.
>>>import plusminus
>>>plusminus.plus(1,2)
3
>>>
아이들에서 위와 같은 코딩은 정상적으로 작동한다!
이와 같은 방식으로 우리는 우리만의 모듈의 이름(파일의 저장명)을 정하고, 그 모듈이 갖는 여러가지 함수들(def를 통해 정의한 함수)들을 사용할 수 있다!
import의 특성 / 간접실행 / 직접실행
또한, 임포트하는 파일에 print가 있는 경우에 대해 생각해보자.
print("It is plusminus module")
def plus(a,b) :
return(a+b)
def minus(a,b) :
return(a-b)
위의 코드를 마찬가지로 plusminus.py라는 이름으로 아이들의 실행경로에 저장하자.
아이들에서 이 파일을 모듈로 임포트하면 다음과 같다.
>>>import plusminus
It's plusminus module
>>>
print 함수가 동작함을 알 수 있다!
위의 사실에서 알 수 있듯 사실 import 함수는 불러오는 모듈의 파일(.py확장자)를 처음부터 끝까지 한번 실행시키는 역할을 한다! (물론, 대략적으로 그렇다는 것이다. 실제 작동구조는 단순히 처음부터 끝까지 코드를 실행시키는 것과는 약간 다를 것이다.) 이를 앞으로 간접실행이라하자.
따라서, 우리가 단순히 작성하고 저장한 .py파일들을 import를 통해 간접적으로 실행시켜볼 수 있다!
importlib
그런데 한가지 문제가 있다.
>>>import plusminus
It is plusminus module
>>>import plusminus
>>>
import함수는 그 전에 호출된 모듈을 두번 다시 호출하지 않는다! (상식적으로 그게 당연히 효율적이니까!)
경우에 따라서, module이 갱신되고, 갱신된 module을 재호출해야하는 상황에서는 어떻게 해야할까? 이를 위해 python에서는 importlib모듈을 지원하고 있다!
>>>import importlib
>>>import plusminus
It is plusminus module
>>>importlib.reload(plusminus)
It is plusminus module
>>>
이처럼 importlib.reload(모듈명)을 통해 이전에 불러왔던 모듈을 다시 새롭게 불러올 수 있다! (갱신된 모듈 파일을 다시 불러올 수 있다는 의미이다!)
앞서 살펴본 내용들을 통해 한가지 의문이 생길 수 있다.
import를 통해 .py파일을 실행하는 것과 ctrl+F5로 바로 실행하는 것의 차이는 무엇인가?
기본적으로 작동하는 과정은 거의 같다! 따라서, 그 결과도 같다.
하지만, 코드가 복잡해짐에 따라, 지금 실행되고 있는 코드가 모듈의 호출에 의해 실행(간접실행)되고 있는 것인지, ctrl+F5를 통해 직접실행되고 있는 것인지 구분할 필요가 생길 수 있다. 이를 위해 파이썬에서는 다음과 같은 변수를 지원한다.
__name__
*_이 두개가 연달아 쓰여 __인 것이다! 주의하자. 하나만 쓰면 정상작동하지 않는다!
이 변수는 파일의 코드가 작동할 때, 인터프리터에 의해 자동으로 생성되는 변수이다.
만약 그 파일이 직접실행되고 있는 경우라면 __name__변수에는 자동으로 "__main__"이라는 문자열이 저장된다.
그러나 그 파일이 모듈의 형태로 임포트되어 간접실행되고 있는 경우라면 __name__변수에는 자동으로 그 모듈의 이름(파일의 저장명)이 문자열로 저장된다.
이를 통해 어떤 코드가 실행되는 것이 모듈에 의한 간접실행인지 직접실행인지를 판단할 수 있다.
아래의 예제를 살펴보자!
print("HelloWorld")
if __name__=="__main__"
print("main program")
else :
print("module")
이 파일의 이름을 testm.py라 하자. 또 아이들의 실행경로에 저장했다고 하자. 이 파일을 단순히 ctrl+F5를 통해 실행시킨다면 아래와 같이 출력된다.
실행결과
Helloworld
main program
그러나, 아이들 창에서 임포트를 통해 간접실행한다면 아래와 같이 출력된다.
>>>import testm
Helloworld
module
>>>
이처럼 프로그램의 실행방법(간접, 직접)을 __name__변수를 통해 확인할 수 있다!
'Development language > Python' 카테고리의 다른 글
Python-11. Str Class의 메소드 종류와 사용법 / find / count / strip / replace / lower / upper / etc. / method Nesting (0) | 2021.12.01 |
---|---|
Python-10 Methods란? / 메소드 / 클래스 / 모듈과 클래스의 차이 (0) | 2021.12.01 |
Python-8. Module이란? / 모듈의 기본 사용법(import, from) (0) | 2021.11.25 |
Python-7. Conditional Statement(조건문) / Boolean application (0) | 2021.11.11 |
Python-6. Boolean / 논리연산자 / 비교연산자 (0) | 2021.11.09 |