모듈

우리가 지금까지는 혼자서 변수, 함수를 만들어 쓰면서 자급자족하는 방법을 배웠다고 한다면, 이제부터는 남이 만들어 놓은 부품을 가져다가 사용하는 방법을 배울 차례입니다.



우리가 복잡한 프로그램을 작성하기 위해서 필요한 모든 과정을 직접 만들어야 한다면 어떤 모습이 될까요?

전체적인 모습에서부터 작은 기능 하나하나까지 모두 구상해서, 만들고, 오류를 수정해서 한 곳에 모아두면 또 오류가 생기고…

더구나, 또 다른 프로그래머는 나와 비슷한 기능을 하는 프로그램을 만들면서 똑같은 시행착오를 답습할테구요.



그래서, 이런 문제를 해결하기 위해 모든 프로그래밍 언어들(제가 아는 한)은 모듈이라는 개념을 사용합니다.

모듈은 프로그램의 꾸러미라고 생각하시면 되지요.

예를 들어, 만약 작성할 프로그램에 수학적인 계산 기능이 필요하다면 math라는 모듈을 불러와서 사용하시면 됩니다.



>>> import math # math 모듈을 불러온다

>>> math.pi # math 모듈의 변수 pi의 값은?

3.1415926535897931




위에서는 수학적인 계산에 필요한 것들을 모아둔 math 모듈을 불러온 다음, math 모듈 내에 정의되어 있는 pi 변수를 사용했습니다. pi는 원주율을 뜻하지요.



이번에는 달력을 불러볼까요? 딱 두 줄만 치면 됩니다.



>>> import calendar

>>> calendar.prmonth(2001, 6)

June 2001

Mo Tu We Th Fr Sa Su

1 2 3

4 5 6 7 8 9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30




훌륭하죠?

이번에는 더욱 훌륭한 것을 보려드리지요.



>>> from Tkinter import *

>>> widget = Label(None, text='I love Python!')

>>> widget.pack()




엉… 뭐가 지나갔냐…



이렇게 파이썬에서는 좋은 기능들을 모듈로 묶어서 자체적으로 제공해 준답니다.

파이썬 뿐만이 아니라 대부분의 언어에서 이런 식으로 프로그래밍을 편리하게 할 수 있도록 지원해주지요.



그럼 모듈을 어떻게 만들고 불러오는지 알아봅시다.

파이썬이 설치된 경로(저는 D:\Python21)에 보면 Lib라는 폴더가 있습니다.

거기서 calendar.py 파일을 텍스트 에디터로 열어보세요. 텍스트 에디터라 함은 바로 ‘메모장’ 같은 프로그램을 말하지요.^^



여러분은 지금 calendar 모듈을 보고 계십니다.

처음에 Calendar printing functions이라고 제목과 모듈의 쓰임새가 설명되어 있구요, 그 다음에는 변수들의 의미와 변수 정의가 쭈욱 나열되어 있지요. 한참 내려가시면 함수들도 보입니다.



그 중에서 isleap() 함수를 찾아보세요. ‘찾기’ 기능을 사용하시는 것이 편리하겠죠?



def isleap(year):

"""Return 1 for leap years, 0 for non-leap years."""

return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)




이 함수는 인자로 입력된 연도가 윤년인지 아닌지를 알려준다고 설명이 되어 있구요, 아래의 식은 윤년을 계산해서 1 또는 0으로 결과를 돌려줍니다.

다시 파이썬 인터프리터로 돌아와서 이 함수를 테스트 해봅시다.

아까 달력 테스트를 안해보신 분은 import calendar 부터 하시고 아래를 따라해보세요.



>>> calendar.isleap(2000) # calendar 모듈의 isleap 함수를 호출

1

>>> calendar.isleap(2001)

0




이제 모듈이 어떻게 만들어졌는지 감이 잡히시지요?

모듈에 넣고 싶은 변수와 함수들을 py 파일로 만들어 두면 되는 거죠.

모듈을 사용할 때는 ‘import 모듈이름’의 형태로 불러두고, ‘모듈이름.함수’ 형식으로 호출하구요.

변수도 마찬가지입니다. 이런 짓 해도 되나 몰라…



>>> calendar.February

2

>>> calendar.February = 3

>>> calendar.February

3









오늘은 모듈을 어떻게 불러오는지 알아보도록 하죠.

어제 해보셔서 대충은 알고 계시겠지만 import를 사용하면 모듈을 불러올 수 있습니다.

import는 ‘수입하다’라는 뜻을 갖고 있구요, 컴퓨터에서는 다른 프로그램으로부터 데이터를 갖고 오는 것을 뜻하지요.



import에도 두 가지 방법이 있습니다.



import 모듈

from 모듈 import 변수나 함수




첫번째 방법은 모듈 전체를 가져오구요, 두번째 방법은 모듈 내에서 필요한 것만 콕 찍어서 가져오는 방법이죠.

두 방법을 비교해볼까요? 어제 소개해드린 Tkinter(티 케이 인터) 모듈을 두 가지 방법으로 사용해보겠습니다.



>>> import Tkinter

>>> Tkinter.widget = Tkinter.Label(None, text='I love Python!')

>>> Tkinter.widget.pack()




첫 번째 방법으로 모듈을 불러오면 모듈 내의 변수를 사용하기 위해서는 ‘모듈.변수’의 형식으로 써주어야 합니다. 매번 써주려면 좀 번거롭겠죠?



>>> from Tkinter import *

>>> widget = Label(None, text='I love Python!')

>>> widget.pack()




두 번째 방법은 모듈내의 이름을 콕 찍어서 가져오는 방법인데, 여기서는 import *라고 써서 전부 다 가져왔습니다.

이렇게 하면 좀 더 편리하군요.



하지만 마냥 좋기만 한 방법은 아니랍니다.

아래의 예에서는 멋 모르고 Label이라는 변수를 정의했다가 Tkinter의 Label이 덮어써버리면 피 보는 수가 있다고… 이 사회에 경종을 울리고 있습니다.



>>> Label = 'This is a Label'

>>> from Tkinter import *

>>> Label






이렇게 장단점이 있으니까 각자 입맛대로 쓰라는군요. 헐~

웬만하면 첫번째 방법을 쓰는 것이 좋겠죠?



지금까지 모듈을 불러오는 방법을 알아봤는데요, 불러온 모듈이 필요 없을 땐 어떻게 할까요? 필요 없는 모듈은 요렇게 지워주면 됩니다.



del 모듈




꼭 그렇게 해줄 필요가 있을까 싶지만, 프로그램을 짜다보면 이런 저런 일이 생기니까 알아두자구요.

다음 예제에서 모듈을 지우는 장면을 보실 수 있습니다.



>>> import calendar

>>> calendar.day_name # calendar 모듈의 변수 day_name

['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

>>> day_name = calendar.day_name # 내 변수 day_name으로 복사

>>> del calendar # 모듈을 지워줌

>>> day_name

['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']




calendar 모듈을 불러와서 리스트를 복사해두고 다시 모듈을 지워버렸군요.

이것이 이해가 되신 분을 위해 위의 예제가 아래의 예제와 같은 일을 한다는 것도 보너스로 알려드립니다.



>>> from calendar import day_name

>>> day_name

['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']




del에 대해서 알려드리려다가 본의 아니게 불러오기 방법 두가지를 또 비교해버렸군요.



지우는 건 이 정도로 넘어가구요, 한 번 import한 모듈을 다시 불러올 수도 있답니다.

그 때는 아래와 같이 reload 함수를 사용하지요.



reload(모듈)




웹 사이트를 파이썬으로 만들었다면, 일부 모듈을 수정할 경우에 이 방법을 사용하면 전체 프로그램을 중단하지 않아도 되니까 아주 유용하겠죠?








이번 시간도 계속해서 모듈에 대해 알아볼까요?

파이썬에서 기본적으로 제공하는 수많은 모듈 중에서 자주 쓰이는 것들을 이번 시간에 살짝 소개해 드리려고 합니다.



처음으로 알려드릴 것은 sys 모듈입니다. 요놈은 파이썬 인터프리터를 제어할 수 있는 방법을 제공하지요.

파이썬 인터프리터를 띄워주세요. 인터프리터가 우리의 명령을 기다린다는 뜻으로 ‘>>>’를 표시하고 있죠? 도스와 마찬가지로 이것도 프롬프트라고 합니다.

sys 모듈을 사용하면 이 프롬프트를 바꿀 수가 있지요.



Python 2.3.4 (CJK) (#53, May 27 2004, 05:47:06) [MSC v.1200 32 bit (Intel)] on w

in32

Type "help", "copyright", "credits" or "license" for more information.

>>>

>>> import sys

>>> sys.ps1 # 현재의 프롬프트는?

'>>> '

>>> sys.ps1 = '^^; ' # 요걸로 바꿔!

^^; print 'hello'

hello

^^; 5*3

15

^^;




재미있지요?

이번엔 인터프리터를 끝내볼까요?



^^; sys.exit()




그 다음에는 os 모듈을 보겠습니다.

이것은 운영체제(OS : Operating System)를 제어할 수가 있지요.

우리가 Windows로 파일과 폴더를 만들고 복사하는 일들도 os 모듈로 할 수 있습니다.



>>> import os

>>>

>>> os.getcwd() # 현재 작업 디렉토리?

'C:\CJKPython23'

>>>

>>> os.listdir('c:\CJKPython23') # 현재 디렉토리의 파일 목록?

['LICENSE.txt', 'README.txt', 'NEWS.txt', 'py.ico', 'pyc.ico', 'pycon.ico', 'pyt

hon.exe', 'pythonw.exe', 'w9xpopen.exe', 'DLLs', 'Lib', 'Uninstall.exe', 'libs',

'include', 'Doc', 'Tools', 'tcl']

>>>

>>> os.rename('README.txt', 'readme.txt') # README.txt를 readme.txt로 바꿈

None

>>>

>>> os.listdir('c:\CJKPython23')

['LICENSE.txt', 'readme.txt', 'NEWS.txt', 'py.ico', 'pyc.ico', 'pycon.ico', 'pyt

hon.exe', 'pythonw.exe', 'w9xpopen.exe', 'DLLs', 'Lib', 'Uninstall.exe', 'libs',

'include', 'Doc', 'Tools', 'tcl']

>>>




위에서는 현재 작업 디렉토리의 파일들 중 README.txt를 readme.txt로 바꿔줬습니다.



다음으로는 string 모듈. 이것은 기본적인 문자열 연산을 제공한답니다.



>>> import string

>>> string.capitalize('python') # 첫 글자를 대문자로

'Python'

>>> string.replace('simple', 'i', 'a') #‘simple’의 ‘i’를 ‘a’로 바꿈

'sample'

>>> string.split('break into words') # 문자열을 분리한 리스트 구함

['break', 'into', 'words']




string 모듈보다 좀 더 전문적으로 문자열을 다룰 수 있는 re(regular expression : 정규 표현식)모듈도 있지요.

다음 예제에서 두번째 줄의 괄호 안에 쓴 것이 정규 표현식인데요, 마침표(.)는 문자 아무거나 한 개를 뜻하고, 별표(*)는 한 개 이상의 문자를 뜻합니다.

그래서 현재 디렉토리에서 p 다음에 n이 나오는 이름을 갖고 있는 파일들을 모두 찾아주게 되지요.

실행한 결과를 잘 보시면 이해가 되실거예요.





>>> import re, glob

>>> p = re.compile('.*p.*n.*')

>>> for i in glob.glob('*'):

... m = p.match(i)

... if m:

... print m.group()

...

pycon.ico

python.exe

pythonw.exe

w9xpopen.exe




이런 것들 외에 처음에 모듈에 대해 설명드릴 때 보여드린 math나 Tkinter도 자주 쓰실 법하네요.



지금까지 몇 가지 예를 보여드렸는데 모듈들이 참 쓸만하죠?
파이썬에서 제공하는 모듈을 잘 활용하면 좋은 프로그램을 쉽게 만들 수 있을 것 같네요.
하지만 수 많은 모듈의 사용법을 모두 머리에 집어넣으실 필요는 없겠죠?
작성하실 프로그램에서 어떤 기능을 필요로 하는가에 따라 어떤 모듈을 사용할 것인지 결정한 다음, 사용설명서를 보면서 모듈의 사용법을 익혀서 프로그래밍하시면 됩니다.
모듈의 사용설명서로는 파이썬과 함께 기본적으로 설치되는 ‘Python Library Reference(파이썬 라이브러리 레퍼런스)’라는 것도 있고, 책이나 인터넷을 통해 자료를 찾아볼 수도 있지요.



끝으로 재미있는 모듈을 하나 더 소개해드릴게요.
한 번 따라해보세요. 그럼 전 이만… 휘리릭~



>>> import webbrowser

>>> url ='http://home.hanmir.com/~johnsonj/'

>>> webbrowser.open(url)
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/27 15:03 2008/05/27 15:03
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3310

Trackback URL : http://tcbs17.cafe24.com/tc/trackback/3310

« Previous : 1 : ... 3119 : 3120 : 3121 : 3122 : 3123 : 3124 : 3125 : 3126 : 3127 : ... 6391 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
Statistics Graph

Site Stats

Total hits:
252773
Today:
90
Yesterday:
1411