PYTHON. 05장 파이썬 날개달기. 05-2 모듈


05-2 모듈

모듈 만들고 불러 보기

// 모듈이란 함수나 변수 또는 클래스 들을 모아 놓은 파일이다. 
// 모듈은 다른 파이썬 프로그램에서 불러와 사용할수 있게끔 만들어진 파이썬 파일이라고도 할 수 있
// 우리는 파이썬으로 프로그래밍을 할 때 굉장히 많은 모듈을 사용한다. 다른 사람들이 이미 만들어 놓은 모듈을 사용할 수도 있고 우리가 직접 만들어서 사용할 수도 있다

모듈에 대해서 자세히 살펴보기 전에 간단한 모듈을 한번 만들어 보자.

# mod1.py def sum(a, b): return a + b


우리가 만든 mod1.py라는 파일, 즉 모듈을 파이썬에서 불러와 사용하려면 어떻게 해야 할까? 

먼저 아래와 같이 도스 창을 열고 mod1.py를 저장한 디렉터리(이 책에서는 C:\Python)로 이동한 다음 대화형 인터프리터를 실행한다.


C:\Users\pahkey>cd C:\Python C:\Python>dir ... 2014-09-23 오후 01:53 49 mod1.py ... C:\Python>python Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AM... Type "help", "copyright", "credits" or "license" for more information. >>>


>>> import mod1 //  import는 이미 만들어진 파이썬 모듈을 사용할 수 있게 해주는 명령어이다. >>> print(mod1.sum(3,4)) // mod1.py 파일에 있는 sum 함수를 이용하기 위해서는 예에서와 같이 mod1.sum처럼 모듈이름 뒤에 '.'(도트 연산자)를 붙이고 함수 이름을 써서 사용할 수 있다. 7


(※ import는 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있다.)


# mod1.py

def safe_sum(a, b): if type(a) != type(b): print("더할수 있는 것이 아닙니다.") return else: result = sum(a, b) return result


>>> import mod1 >>> print(mod1.safe_sum(3, 4)) 7


>>> print(mod1.safe_sum(1, 'a')) 더할 수 있는 값이 아닙니다. None >>>


mod1의 sum 함수 역시 다음처럼 바로 호출할 수도 있다.


>>> print(mod1.sum(10, 20)) 30


[모듈 함수를 사용하는 또 다른 방법]

때로는 mod1.sum, mod1.safe_sum처럼 쓰지 않고 그냥 sum, safe_sum처럼 함수를 쓰고 싶은 경우도 있을 것이다. 이럴 때는 "from 모듈이름 import 모듈함수"를 사용하면 된다.

from 모듈이름 import 모듈함수

from ~ import ~를 이용하면 위와 같이 모듈이름을 붙이지 않고 바로 해당 모듈의 함수를 쓸 수 있다. 다음과 같이 따라 해보자.

>>> from mod1 import sum
>>> sum(3, 4)
7

그런데 위와 같이 하면 mod1.py 파일의 sum 함수만 사용할 수 있다. sum 함수와 safe_sum 함수를 둘 다 사용하고 싶다면 어떻게 해야 할까?

2가지 방법이 있다.

from mod1 import sum, safe_sum

첫 번째 방법은 위와 같이 from 모듈이름 import 모듈함수1, 모듈함수2처럼 사용하는 방법이다. 콤마로 구분하여 필요한 함수를 불러올 수 있다.

from mod1 import *

두 번째 방법은 위와 같이 * 문자를 사용하는 방법이다. 07장에서 배울 정규 표현식에서 * 문자는 "모든것"이라는 뜻인데 파이썬에서도 마찬가지 의미로 사용된다. 따라서 from mod1 import *는 mod1.py의 모든 함수를 불러서 사용하겠다는 말이다.

mod1.py 파일에는 함수가 2개밖에 없기 때문에 위의 2가지 방법은 동일하게 적용된다.

if __name__ == "__main__": 의 의미

# mod1.py def sum(a, b): return a+b def safe_sum(a, b): if type(a) != type(b): print("더할수 있는 것이 아닙니다.") return else: result = sum(a, b) return result print(safe_sum('a', 1)) print(safe_sum(1, 4)) print(sum(10, 10.4))


위와 같은 mod1.py 파일을 에디터로 작성해서 C:\Python이라는 디렉터리에 저장했다면 다음처럼 실행할 수 있다.


C:\Python>python mod1.py 더할 수 있는 것이 아닙니다. None 5 20.4


// 결과값은 위의 예처럼 출력될 것이다. 그런데 이 mod1.py 파일의 sum과 safe_sum 함수를 사용하기 위해 mod1.py 파일을 import하면 문제가 생긴다


도스 창을 열고 다음을 따라 해보자.


C:\WINDOWS> cd C:\Python C:\Python>python >>> import mod1 더할 수 있는 것이 아닙니다. None 5 20.4


// 엉뚱하게도 import mod1을 수행하는 순간 mod1.py가 실행이 되어 결과값을 출력한다. 우리는 단지 mod1.py 파일의 sum과 safe_sum 함수만 사용하려고 했는데 말이다. 이러한 문제를 방지하려면 다음처럼 하면 된다.


if __name__ == "__main__": print(safe_sum('a', 1)) print(safe_sum(1, 4)) print(sum(10, 10.4))


// if __name__ == "__main__"을 사용하면 C:\Python>python mod1.py처럼 직접 이 파일을 실행시켰을 때는 __name__ == "__main__"이 참이 되어 if문 다음 문장들이 수행된다. 

// 반대로 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용할 때는 __name__ == "__main__"이 거짓이 되어 if문 다음 문장들이 수행되지 않는다.


파이썬 모듈을 만든 다음 그 모듈을 테스트하기 위해 보통 위와 같은 방법을 사용하는데, 실제로 그런지 대화형 인터프리터를 열고 실행해 보자.

>>> import mod1 >>>


mod1.py 파일의 마지막 부분을 위와 같이 고친 다음에는 아무런 결과값도 출력되지 않는 것을 볼 수 있다.


알아두기

파이썬의 __name__ 변수는 파이썬이 내부적으로 사용하는 특별한 변수명이다. 만약 C:\Python>python mod1.py처럼 직접 mod1.py 파일을 실행시킬 경우 mod1.py의 __name__ 변수에는 __main__ 이라는 값이 저장된다. 하지만 파이썬 쉘이나 다른 파이썬 모듈에서 mod1을 import 할 경우에는 mod1.py의 __name__ 변수에는 "mod1"이라는 mod1.py의 모듈이름 값이 저장된다.

클래스나 변수 등을 포함한 모듈

지금까지 살펴본 모듈은 함수만 포함했지만 클래스나 변수 등을 포함할 수도 있다. 다음의 프로그램을 작성해 보자.

# mod2.py PI = 3.141592 class Math: def solv(self, r): return PI * (r ** 2) def sum(a, b): return a+b if __name__ == "__main__": print(PI) a = Math() print(a.solv(2)) print(sum(PI , 4.4))

C:\Python>python mod2.py 3.141592 12.566368 7.541592

이번에는 대화형 인터프리터를 열고 다음과 같이 따라 해보자.


C:\Python>python >>> import mod2 >>>

__name__ == "__main__"이 거짓이 되므로 아무런 값도 출력되지 않는다.

모듈에 포함된 변수, 클래스, 함수 사용하기

>>> print(mod2.PI) 3.141592

위의 예에서 볼 수 있듯이 mod2.PI처럼 입력해서 mod2.py 파일에 있는 PI라는 변수값을 사용할 수 있다.

>>> a = mod2.Math() >>> print(a.solv(2)) 12.566368

위의 예는 mod2.py에 있는 Math 클래스를 사용하는 방법을 보여 준다. 위의 예처럼 모듈 내에 있는 클래스를 이용하려면 '.'(도트 연산자)를 이용하여 클래스 이름 앞에 모듈 이름을 먼저 입력해야 한다.

>>> print(mod2.sum(mod2.PI, 4.4)) 7.541592

mod2.py에 있는 sum 함수 역시 당연히 사용할 수 있다.


새 파일 안에서 이전에 만든 모듈 불러오기

// 지금까지는 만들어 놓은 모듈 파일을 사용하기 위해 대화형 인터프리터만을 이용했다. 
// 이번에는 새롭게 만들 파이썬 파일 안에 이전에 만들어 놓았던 모듈을 불러와서 사용하는 방법에 대해 알아보자.

# modtest.py import mod2 result = mod2.sum(3, 4) print(result)

// 방금 전에 만든 모듈인 mod2.py 파일을 새롭게 만들 파이썬 프로그램 파일에서 불러와 사용해 보자. 그럼 에디터로 다음과 같이 작성해 보자.

// 위에서 볼 수 있듯이 파일에서도 import mod2로 mod2 모듈을 불러와서 사용하면 된다. 
// 대화형 인터프리터에서 한 것과 마찬가지 방법이다. 
// 위의 예제가 정상적으로 실행되기 위해서는 modtest.py 파일과 mod2.py 파일이 동일한 디렉터리에 있어야 한다.

Posted by 너래쟁이
: