Python 에 해당하는 글9 개
2008.11.21   근의 공식에서 100000(10만)이상의 숫자에 대해서 오차 줄이기
2008.10.04   실행 시간 측정
2008.08.19   귀도는 고기를 좋아해.
2007.05.24   이거 재밌네.
2007.02.08   이클립스...인코딩....
2007.02.03   헤헤 찾았다. Eclipse 에서의 Python Shell...^^:
2007.02.02   이클립스와 IDLE에서의 인코딩 설정
2005.06.20   py2exe && 인스톨팩토리 로 배포파일 만들기
2005.06.19   wxPython으로 GUI 프로그래밍하기


근의 공식에서 100000(10만)이상의 숫자에 대해서 오차 줄이기
日新又日新 | 2008.11.21 20:54

귀찮구나. 그냥 카피앤페이스트.

Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************
   
IDLE 1.2.2     
>>> (pow(10,5)+2)*(pow(10,5)-2)
9999999996L
>>> pow(10,10)-4
9999999996L #인수분해한 식과 전개한 식의 값은 같음을 확인.
>>> import math
>>> math.sqrt(pow(10,10)-4)
99999.999979999993
>>> math.sqrt((pow(10,5)+2))*math.sqrt((pow(10,5)-2))
99999.999979999993  #루트를 씌운 상태에서도 마찬가지임을 확인
>>> math.sqrt((pow(10,5)+2))
316.23092827868686
>>> math.sqrt((pow(10,5)-2))
316.22460372336622
>>> t = pow(10,10)-4
>>> t
9999999996L
>>> roott = math.sqrt(t)
>>> roott
99999.999979999993
>>> (pow(10,5)-roott)/2 #대상 수식은 x^{2} - 10^{5}x+1 = 0 이었음.
1.0000003385357559e-005 #실제 작은 값의 근은 0.00001, 0.0000003385357559 의 양의 오차가 있다.
>>> (pow(10,5)+roott)/2
99999.999989999997 #실제 답은 99999.9998, 큰 값의 근에 대해서 0.000009999997 의 양의 오차가 있다.
>>> (pow(10,5)*roott - t)/(2*roott)  #root(b^2-4ac) 부분을 분모분자에 곱해준다.
1.0000000002000001e-005  #오차가 줄어든 것을 확인할 수 있다. 작은 값의 근에 대해서 0.0000000002000001 로 줄어들었다. 0.0000003383357558 만큼이 줄어들었다.
>>> (pow(10,5)*roott + t)/(2*roott)
99999.999990000011 #두 근 중 큰 값에 대해서도 오차가 0.000000000011 로 줄어들었다. 0.000009999986 만큼의 오차를 줄인 셈이다.
>>>

신고

 
 
 
태그 : Python, 근의공식, 수치오차
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



실행 시간 측정
日新又日新 | 2008.10.04 17:11
def elapsedtime():
    import time

    a = time.clock()    #현재 시점에서의 프로세스 실행시간

    for x in range(4):
        #잡다구레 작업을 한다면...
        pass

    b = time.clock()    #어떤 작업 후의 프로세스 실행시간

    c = b - a         #그 둘의 차이 : 어떤 작업에 걸린 시간

    #float 형으로 반환된다.
    print str(c)+'(s)'
    print str(c*100)+'(ms)'
    print str(c*100000)+'(us)'
    print str(c*100000000)+'(ns)'

    return b-a

신고

 
 
 
태그 : Python, Time, 실행시간
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



귀도는 고기를 좋아해.
日新又日新 | 2008.08.19 14:43
아무 생각없이 웹서핑 중, 귀도의 홈페이지를 찾게 되었는데...

자기 사진 밑에 멋진 말을 써 넣은 귀도, 멋쟁이~!
사용자 삽입 이미지

"Gawky and proud of it"

해석 : 덜 떨어졌지만, 자랑스럽다.
음역: 고기 앤 프라우드 오브 잇.
재해석: 고기와 고기에 대한 긍지.

귀도, 멋진데?
신고

 
 
 
태그 : Python, 고기, 귀도
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



이거 재밌네.
日新又日新 | 2007.05.24 15:39
꼭 파이썬을 이용해야 하는 건 아니지만, 파이썬을 이용하면 쉽게 푸는 문제들.
http://www.pythonchallenge.com/
신고

 
 
 
태그 : Python
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



이클립스...인코딩....
日新又日新 | 2007.02.08 11:11
젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장, 젠장!!!!!

이클립스에서 인코딩 문제는 짜증나네...-_-

문자열 하나 넘길 때도 이게 어떻게 버퍼에 저장되는지 확인해야 되니...-_-

그냥 짜증나서 함수 만들어서 쓴다. 이거 import 구문으로 바꿔서 쓸 수 있게 하면 편할텐데...

def EncodingChange(SourceString):
    ReturnString = SourceString.encode('euc-kr')
    return ReturnString
함수 이름도 짧게 EC로 바꿀까?

---
누가 파이썬에서 Access 파일에 접근할 수 있게 ODBC 사용법 좀 알려줘요~=_=
신고

 
 
 
태그 : Python, 이클립스
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



헤헤 찾았다. Eclipse 에서의 Python Shell...^^:
日新又日新 | 2007.02.03 04:03
---
사실 인코딩도 인코딩이지만, 지금 필요한 것은 이클립스 상에서 파이썬 인터프리터 화면을 보는 것이다. PyDev 에 그런 기능은 없나? Pydev 퍼스펙티브에 Interpreter 뷰만 추가되면 딱!인데...=_=
지난 글에 써놨던 내용인데...
좌절 금지!
구글신이 함께 하신다.ㅋㅋㅋ

How do I configure a python shell for experimenting with Python?

그래그래...다 좋은데...

콘솔창에서 뜨다 보니 얘가 파이썬 인터프리터 메시지를 표준 에러로 처리한다는 거...=_=

그래도 인터프리터 창을 따로 안 띄우고 바로 바로 확인할수 있다는게 어디냐!

다음은 external tool을 이용해서 콘솔창에 파이썬 인터프리터를 띄워놓은 화면이다. 좋다...^^;

신고

 
 
 
태그 : Python
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



이클립스와 IDLE에서의 인코딩 설정
日新又日新 | 2007.02.02 16:58
난 원래 IDLE 만 사용했었다. 한때 사용했었던 BoA 의 끔찍한 매력을 잊기 위해서 IDLE을 사용하고 있었는데 역시 초보에게는 자동완성기능이 너무나도 절실하게 필요해서 이클립스를 사용하기 시작했다.

그런데...

이클립스에서 다음 소스가 동작을 안 하는 것이다.
파일트리를 얻어낼 필요가 있어서 예제코드를 그대로 따라해보고 있었는데,

# -*- coding: cp949 -*-
import os

def testmodule():
    image_dir = "E:\Firefox"
    print image_dir
    t = os.walk(image_dir)
    print type(t)
    print "t = ", t
   
    for root, dirs, files in os.walk(image_dir):
        for name in files:
            #os.remove(os.path.join(root, name))
            print os.path.join(root, name)
        for name in dirs:
            #os.rmdir(os.path.join(root, name))
            print os.path.join(root, name)

def main():
    testmodule()
    pass

main()


이상하게 결과가 예상대로 안 나오는 것이다. 예상대로라면 디렉토리 안의 파일들이 쭈르륵 쏟아져야 되는데...
더욱 이상한 건 이클립스에서는 안 되는데 IDLE에서는 정상작동한다는 것.

그래서 문자열 처리 방식이 문제인가 싶어서 인코딩 방식을 cp949 에서 euc-kr로 설정해주었더니 정상 작동!
혹시나 싶어 utf-8로 바꿔봐도 정상 작동!


흠, cp949 랑 euc-kr, utf-8 의 차이는 무엇이길래 이클립스가 저리도 편식을 하는 건지?

암튼 앞으로는 utf-8을 애용해주어야겠다.
IDLE에서도 문제없이 작동하는 것을 보니 지금까지 cp949에서 코딩하던 습관을 utf-8로 바꿔줘야겠군.

참고로 도움을 얻은 페이지.
질문 제목은 "디렉토리를 탐색해 파일목록을 얻어오는 것"이다.

---
근데 생각해보니 예제 소스에 한글이 하나도 없었구나.
한글을 한번 넣어보구서 확인해 봐야 할 것을...=_=
집에 가면 바로 해봐야지~

---
집에 와서 해보니 역시 윈도에서 잘 먹는 건 EUC-KR이다.
이클립스에서 파이썬 코딩할 때는 까먹지 말자.
# -*- coding: EUC-KR -*-
이걸 넣어줘야 정상 저장/실행 되리라~

---
사실 인코딩도 인코딩이지만, 지금 필요한 것은 이클립스 상에서 파이썬 인터프리터 화면을 보는 것이다. PyDev 에 그런 기능은 없나? Pydev 퍼스펙티브에 Interpreter 뷰만 추가되면 딱!인데...=_=
신고

 
 
 
태그 : Python
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



py2exe && 인스톨팩토리 로 배포파일 만들기
日新又日新 | 2005.06.20 06:52

py2exe와 인스톨 팩토리의 콤비네이션 이용하기

안녕하세요..오늘은 py2exe와 인스톨 팩토리의 콤비네이션을 배워보겠습니다. 다들 아시죠? 콤비네이션이 얼마나 무서운건지를...-_-;; 퍼퍼퍼퍽....하면 끝이죠..

우선 ..py2exe가 멀까요? 보아하니 py 즉 파이썬 파일을 2 exe로 만든다...exe로 만든다..제가 설명해 드리면 파이썬 소스코드 파일을 exe 파일로 만들어주는 것입니다. 여러분이 파이썬으로 프로그래밍을 하면 그것은 py 파일로 저장되죠? py파일은 컴퓨터에 파이썬 인터프리터가 설치가 되어야 실행이 됩니다. 그렇다면 만약에여러분들이 만든 프로그램을 다른 사람에게 주고 싶을땐 어떻게 해야 하는걸까요? 상대방이 파이썬 인터프리터를 설치를 해야한다면 얼마나 불편하겠씁니까....간단한 프로그램 하나 실행하려면 파이썬을 설치하고 해야한다..이러면 아무도 프로그램을 사용안할지도 모르겠습니다. 여기서 등장한 것이 바로 py2exe입니다. 이것이 바로 윈도우에서 실행파일 즉 exe로 만들어주는 것이죠......대충 이해가 가시죠? ^-^

다음은 인스톨 팩토리입니다. 여러분들 모두 프로그램 설치 무쟈게 많이 해보셨을겁니다. 파이썬을 깔때도 인스톨 한거죠? 보통 인스톨할 때 외국제 프로그램인 인스톨 쉴드나..기타 등등 프로그램이 많이 사용되는데요..돈을 내야 한다는 무리수가.-_-;; 그래서 역시 공짜인 대한민국 프로그램 인스톨 팩토리를 이용해 설명해 보겠습니다. 기대를 하세요...

1. py 코드를 exe로 만들어 보자
일단 프로그램을 배포하려면 소소코드를 exe로 만들어야 합니다.

우선 다음과 같이 여러분의 소스코드가 준비가 되야겠죠? 저는 이미지 하나를 포함시킨 아래의 소스 코드를 준비하였습니다. 기본적인 창을 띠우는 소스 코드야..당연히 되겟죠.. 여기서는 이미지 하나에 버튼등을 넣어보았습니다. (소스코드 이름은 ex.pyw)입니다.

#-*-coding:mbcs-*-
import wx  
#로그인 창의 버튼 이벤트 ID값
ID_LOGINENTER=1100
ID_LOGINEXIT=1101

class MyFrame(wx.Frame):
    def __init__(self, parent, id,title):
        wx.Frame.__init__(self, parent,id,title,size=(200,240),pos=wx.DefaultPosition,
            style=wx.DEFAULT_FRAME_STYLE)
        panel=wx.Panel(self,-1)
        wx.StaticBitmap(panel,-1,wx.Bitmap('image\\login.gif',wx.BITMAP_TYPE_GIF),(25,12))
        wx.StaticLine(panel, -1, (-1,100),size=(200,-1), style=wx.LI_HORIZONTAL)
        wx.StaticText(panel, -1,'암호를 입력하세요. 초기\n암호는 korea 입니다', (30, 110))
        self.TextCtrl=wx.TextCtrl(panel, -1, "", wx.Point(30,140),wx.Size(135,20),style=wx.TE_PASSWORD )

        wx.Button(panel,ID_LOGINENTER,'확인', wx.Point(50,170),wx.Size(40,24))
        wx.EVT_BUTTON(self,ID_LOGINENTER, self.OnEnter)
        wx.Button(panel,ID_LOGINEXIT,'종료', wx.Point(110,170),wx.Size(40,24))
        wx.EVT_BUTTON(self,ID_LOGINEXIT, self.OnExit)
        wx.StaticLine(panel, -1, (-1,200),size=(200,-1), style=wx.LI_HORIZONTAL)

    def OnEnter(self,event):
        dlg=wx.MessageDialog(self,'암호는 %s 입니다.'%self.TextCtrl.GetValue(),'암호',wx.OK)
        dlg.Centre()
        dlg.ShowModal()
        self.TextCtrl.Clear()        

    def OnExit(self,event):
        self.Destroy()

class MyApp(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        self.frame = MyFrame(None,-1,'wxFrame 사용')
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

if __name__ == '__main__':
    app=MyApp(0)
    app.MainLoop()

2. 다음과 같이 setup.py 파일을 작성한다. (여러분이 만든 소스코드 이름이 ex.pyw 라고 가정)

#setup.py

from distutils.core import setup
import glob
import py2exe

setup(name="ex",
        scripts=["ex.pyw"])

3. 여러분이 만든 프로그램 소스코드...저는 ex.pyw 랑...그리고 setup.py 파일을 c:\python23 폴더에 가져다 놓습니다.

4. 도스창에서 다음을 실행합니다.

python setup.py py2exe

5. 다음과 같이 C:\Python23\dist 폴더에 보면 ex 라는 이름의 폴더가 생기고 안에 파일이 생성이 됩니다. 아래의 그림을 보시면 알겠지만 ex.exe가 실행파일입니다.  물론 나머지 파일이 있어야 실행이되죠..

6. 아참 ...까먹을 뻔 했습니다. 이미지 파일 문제인데요...그냥 이미지 파일은  위에 그림처럼 실행 파일이 있는 곳 (c:\python23\dist\ex)이죠? 여기에다 그냥 복사해서 넣어주시면 됩니다. ^-^;; 이해 가시죠?


참고사항

py2exe가 한글문제에 약합니다. 보통 한글을 인코딩....encode 어쩌구 해가지고 사용했던 소스코들은 exe로 만든 후 실행하면 잘 안되는 경우가 있습니다. 그럴땐 이렇게..

python setup.py py2exe --packages encodings

주> 이 부분은 파이썬 2.4 에 맞추어서 SeaofMagic 이 직접 수정하였음. 밑에 아이콘도 수정 요망

또 하나..........아이콘을 넣고 싶을대가 있죠? 위의 ex.exe 실행파일을 보면 py라는 그림으로 되어있죠?
저거 그림을 바꾸려면

python setup.py py2exe packages encodings --force-imports encodings --icon icon.ico

이런식으로 하면 됩니다. 그냥 마지막에 ( --icon 아이콘 파일 ) 이런식이죠....단 xp 이상 컴터에서 실행해야 된답니다. 윈도우 2000인가? -_-;


인스톨 팩토리로 프로그램 배포하기
 아래의 그림을 보시면 알겠지만 여러분들이 만든 프로그램을 py2exe로 만들면 거기에는 여러 파일이 있습니다. wxPython으로 GUI프로그래밍을 했으니깐..당연히 wxPython 파일도 있고 파이썬으로 만들었으니깐 파이썬 파일도 있고..파이썬에서 사용되는 모듈도 파일로 나옵니다.

보통 여러분들이 다른 프로그램들을 설치하려고 다운 받으면 exe 파일 하나로 이루어져 있죠?
(예 : alzip5.3.exe , potoshop6.exe 이런식이죠...)

그리고 또하나 중요한 것은 지금 위의 파일들을 선택한 후 용량을 한번 확인해 보세요..간단한 창하나 만드는데 8M 파일이 생성이 됐습니다. wxmsw24h.dll 파일만 4M가 정도니....인스톨 팩토리는 이러한 문제를 단번에 해결해 줍니다. 모든 파일을 묶어서 하나의 exe 파일로 만들어주면서 압축을 통해서 3~4M 정도로 만들어줍니다. 거의 50% 정도가 압축이 되는거 같습니다. ^^

1. 우선 인스톨 팩토리를 다운 받아서 설치를 해야겠죠? 여러분의 검색 실력을 발휘해서 2.70 버전을 찾아 설치를 해보세요...

2. 다음과 같이 인스톨 팩토리를 실행합니다.

3. 일반 탭을 클릭한 후 아래 그리처럼 설정을 합니다.
타이틀 :  설치화면 상단에 보여질 이름...(보통 프로그램 이름을 하시면 되겠죠?)

소스 폴더 : 현재 프로그램이 있는 폴더져...저는 c:\python23\dist 에 있던 폴더를 그냥 c:\로 복사해서 사용하고 있습니다.

기본 설치폴더 : 프로그램이 설치될 폴더를 설정합니다.

설치화일이 만들어질 폴더 : 인스톨 팩토리를 통해서 설치화일이 만들어지는데 그것을 어디다가 생성할지를 지정하는 곳입니다. 저는 그냥 귀찬아서 바탕화면에 일단 만들려고 합니다.

4. 창 탭을 클릭한 후 아래 그림처럼 설정합니다.

5. 정보탭을 클릭해서 라이센스 정보 및 설치전에 보일 정보를 편집 버튼을 눌러서 편집을 합니다.

6. 단축 아이콘 탭을 눌러 단축 아이콘을 지정합니다.

수정 탭을 누르면 수정을 할 수 있습니다

7. 제거 탭을 클릭 한 후 다음 그림처럼 적당히(?) 설정을 해줍니다.

저는 따로 제거시 실행할 사용자 제거프로그램도 이용하기 때문에 사용중인데..필요에 따라 사용 하셔도 되고 안하셔도 됩니다. ^^

8. 나머지 탭에 대한 설정은 필요한 부분을 사용하면 됩니다. [설치화일 만들기] 버튼을 눌르면 설치 파일이
만들어 집니다.

9. 설치화일은 Rapid Boot Pro.exe 이렇게 실행파일 하나로 만들어 지는것고 용량이 많이 줄어든 것을 알 수 있습니다.

이것으로 오늘 강좌도 끝입니다. 좋은 프로그램 많이 만드셔서 배포하기 바랍니다. ^^


주> 만일 윈도우 XP에서 Python24로 만든다면, mscvr71.dll 파일도 같이 배포를 해서

      system32폴더에 넣어주어야 한다.


== 출처 ==


http://jetc.woto.net/wxpython/py2exe.htm


허락없이 가져와서 죄송합니다...문제되시면 연락 주세요..^^;

신고

 
 
 
태그 : py2exe, Python
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



wxPython으로 GUI 프로그래밍하기
日新又日新 | 2005.06.19 13:46

헤헷, 내가 번역했다구. 지금 프로그래밍 하고 있는게 있는데 막상 내가 보려니까 답답해서, 그래서 번역을 했는데, 이것이 Python 공동체에 기여가 된다면 얼마나 좋을꼬.

C++ Guide for wxPythoneers


1. 서론
wxPython 에 관한 최근의 많은 문서들이 사실 wxWindows문서를 기반으로 한 C++
문서이고, 필요한 곳에는 Python에 특화된 설명이 붙어있다. 이것은 wxPython
사용자가 C++ 의 메소드와 함수 정의를 읽어낼 수 있고 그것을 파이썬의 구문으로
번역할 수 있어야만 한다는 것을 의미한다. C++를 경험해보지 못한 사람들에게,
이것은 아주 기를 꺾어버리는 것이 될 수 있다. 이 안내서의 목적은 그런 작업을
더욱 쉽게 만들어주는 것이다.


2. 문서가 작성되어지게 된 경위
당신에게 유용한 글을 찾을 수 있는 "wxPython Notes"와 "Topic Overview"에 있는
몇개의 문서들은 논외로 하고서, 파이썬 프로그래머에게 있어 가장 중요한
wxPython문서들은 다음과 같다.
 - The Alphabetical Class Reference
 - The list of Functions
주>해당 문서들은 wxPython 2.6 버전의 Demo 중, wxWidgets Reference 안에 있다.

이것은 당신이 wxPython 애플리케이션을 개발할때 몇번이고 다시 참조하게 될
정보들이다. 그러나 불행하게도, 이 레퍼런스들은 C++ 프로그래머를 위해서 씌여졌고
따라서 거의 모든 메소드와 함수 정의들이 파이썬 프로그래머가 감을 잡기 힘들게
C++ 언어로 씌여져 있다.


3. C++에서 번역하기
한번 Alphabetical class Reference의 전형적인 항목을 살펴보자. 예를 들어 만일
당신이 wxWindos의 항목으로 이동했다면 다음과 같은 구성을 볼 것이다.
 - A general description of the class
     클래스에 대한 전반적인 설명
 - Derived from
     이것은 현재 보고있는 클래스가 상속받은 클래스의 리스트이다.

 - Include files
     이것은 파이썬 프로그래머랑은 관련이 없다.
 - Window styles
    이것들은 현재의 클래스가 서로 다른 방식으로 동작한다라든지 어떻게
    보여지는가라든지에 대한 "style" 코드들이다.
 - See also
     스스로 설명(?)

 - Members
    C++ 에서, "memver function"이란 용어는 클래스의 메소드에 대한 참조로 쓰인다.
    따라서, 클래스의 여러가지 메소드들은 이 부분에 나열이 되어있고, 표준 C++
    로 기술이 되어있다.
      <>::<>
    기본적으로, 이것은 단지 클래스의 서로다른 메소드들에 대해 빠르게 접근할 수
    있는 목록이다. 메소드 명칭을 클릭하면 당신은 그 메소드의 정의로 안내될 것이다.

이것은 모든 서로다른 "member function"(메소드) 정의에 해당한다.

3.1. 생성자와 소멸자
이 두개의 특별한 메소드들은 각각의 클래스에 대해서 정의되어있다. 그리고 이것들은
언제나 리스트의 맨 위에 위치한다. 먼저, "constructor"(생성자) 메소드가 있는데,
파이썬의 __init__() 메소드에 해당한다. --이것은 클래스의 새로운 오브젝트가
생성될때 항상 호출되는 메소드이다. C++에서, 생성자는 언제나 클래스 자신과 같은
이름을 가진다. 따라서 예를들면 wxWindow 클래스의 생성자는 다음과 같이 호출된다.
      wxWindow::wxWindow
소멸자 메소드는 당신이 생각하듯이 클래스의 오브젝트가 더이상 사용되지 않고
소멸되어야 할때 호출된다. 파이썬은 __del__()이라는 동등한 메소드를 가지고 있다.
C++과는 다르지만 이것은 상당히 많은 파이썬 사용자들에게는 소멸을 알아차리지
못할 것이기 때문에 드물게 사용되는 것이다.(?) C++에서, 소멸자는 언제나 클래스의
이름에 틸드기호("~")를 앞에 붙여서 이름지어진다. 따라서 wxWindows 클래스의
소멸자는 다음과 같이 호출된다.
      wxWindow::~wxWindow

보통 wxPython 프로그램은 소멸자 메소드에 대해서 사용할 일이 없거나 신경쓸 필요가
없으므로, 그것을 무시해도 상관없다.


4. 메소드 정의
메소드 정의는 wxWindows 문서의 가장 유용한 부분이면서 불행히도 만일 당신이 C++에
익숙하지 못하다면 가장 이해하기 어려운 부분이다. 예를 들어 다음은 wxWindow 클래스에
대한 생성자(__init__() 메소드)이다.
 wxWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxPanelNameStr)
이것은 끔찍하게 보일 것이다. 그러나 만일 당신이 다음 내용을 기억한다면 해석하는
것이 절대 어려운 일이 아니다.
 1. 파이썬에서처럼, 모든 파라미터들은 왼쪽에서 오른쪽으로 각각을 콤마로
 구분하면서 나열된다. 따라서 예를 들면 새로운 wxWindow를 생성하려면
 당신은 아마도 다음과 같은 호출을 사용할 것이다.
  myWindow = wxWindow(parent, id, pos, size, style, name)
 파이썬에서 메소드를 정의할 때, 당신은 단지 각각의 파라미터들의 이름을
 나열하고 가능한 기본값을 주면 된다. 왜냐하면 C++는 훨씬 더 복잡한
 언어이기 때문에 매우 많은 정보들이 각각의 파라미터들에게 주어져야 하기
 때문이다. --그러나 파라미터들을 나열할때 다른것 앞에 있어야 하는 기본적인
 원칙은 여전히 적용된다.
 주> 인수들의 순서를 말하는 듯 싶군요.
 
 당연한 것이지만, 파라미터들이 메소드 정의안에 있어야 하는 것과 마찬가지로
 파라미터들은 "Parameters" 구역안에 구분되어져서 나열이 되어야 한다.
 자주 있는 경우로 만일 당신이 복잡한 세부내용을 읽지도 않는다면, 파라미터들의
 목록은 아마도 당신에게 당신이 필요로 하는 모든것을 말해줄 것이다.
 확실히 시작하는 사람에게 있어서 너무 좋다!

 2. C++가 "strongly typed" 언어이기 때문에, 각각의 파라미터들은 그것에
 관련한 "type"을 가져아 한다. 예를 들어, wxWindow 생성자에서, "pos"
 파라미터는 wxPoint(wxPoint 객체)라는 형식을 가진다. 이런 형식 값은
 메소드를 이해하기 위한 형식 정보를 판단하는 실마리로 유용하다.
 게다가 wxWindows 자신에 의해서 정의된 객체들의 서로 다른 형식들이 있다.
 여기 당신이 만나게 될 공통된 C++ 내장 형식들이 있다.
  int : A integer number
  long : A long integer number
  float : A floating-point number
  bool : A TRUE-or-FALSE value
  wxString : A wxWindows-specific string(text) value

 3. 파이썬에서처럼, 많은 파라미터들이 기본값을 부여받는다. 당신은 모든
 파라미터들을 기본값과 함께 나열할 필요가 없고, 만일 당신이 그렇게 한다면
 키워드들을 당신이 입력한 각각의 파라미터들을 구분하는데 사용할 수 있다.
 예를 들어, 당신은 새로운 wxWindow객체를 다음의 구문을 이용하여 생성할 수
 있다.
  myWindow = wxWindow(parent, id, style = wxSIMPLE_BORDER)
 기본값은 이미 남겨진 파라미터들에게 제공이 되어있기 때문에, 당신은
 사용하길 원한다 해도 나열할 필요가 없다.

 4. 메소드 정의에 있어서 나열된 파이썬과는 상관없는 특별한 문자와
 코드들에 대한 모음이다.
  - 파라미터 형식 뒤의 * 문자
  - 형식 앞의 const 라는 단어
  - 형식 뒤의 & 문자
 좋은 소식은 파이썬 프로그래머인 당신은 이 모든 딱딱한 표현들을 간단히
 무시해도 된다는 것이다!

 5. wxWindows에서 정의된 많은 메소드들이 호출자에게 값을 리턴하기 때문에
 C++는 당신이 각각의 파라미터들에 대한 형식처럼 메소드의 형식을 정의할
 것을 요구한다. 파라미터들과 마찬가지로, 메소드에 의해 리턴된 값의 형식은
 메소드 명칭 앞에 나열된다. 예를 들어, wxWindows.getFont() 메소드는
 다음과 같은 정의를 가진다.
  wxFont& GetFont() const
 여기서 GetFonst() 메소드는 wxFont 객체를 리턴받게 설정되었다. 파라미터와
 마찬가지로, 메소드의 반환형식에 대한 나열은 메소드가 리턴할 정보에 대한
 유용한 실마리가 될 수 있다.
 파라미터와 같이, 당신은 단지 C++하고만 연관된 난해한 코드들을 맞닥뜨리게
 될 것이다. 예를 들어,
  - 메소드 명칭 이전의 static 라는 단어
  - 메소드 정의 마지막의 const 라는 단어
  - 메소드 정의 전의 void 라는 단어
  - 메소드 정의 전의 virtual 라는 단어
 void 코드는 특별한 언급을 할 만하다. 만일 메소드가 void 형식을 리턴하도록
 되어있다면, 그것은 그 메소드가 어떤 값도 반환하지 않는다는 것을 의미한다.
 예를 들어 이것은 파이썬에서 다음 메소드는 값을 반환하지만,
  def spam(self, x):
   return x * 21.7
 다음 메소드는 그렇지 않다.
  def eggs(self, x):
   self.variable = x
 C++에서, spam() 메소드는 float 형식을 반환할 것이지만, eggs() 메소드는
 아무런 값을 반환하지 않기 때문에 void 형식을 반환한다.
 
 6. 파이썬에서처럼, C++ 객체는 모든 메소드 정의에서 그들 부모 클래스로부터
 "inherit"(상속)을 받는다. 따라서 예를 들자면 wxFrame 클래스는 wxWindow
 클래스, wxEvtHandler 클래스, wxObject 클래스에서 상속을 받는다.
 이것은 wxWindow, wxEvtHandler, wxObject 의 메소드들은 wxFrame 객체가
 이런 모든 상속받은 메소드들을 호출할 수 있어도 wxFrame 문서에서는
 나열되지 않는다는 것을 의미한다. 이것은 항상 염두에 두고 있어야 유용하다.
 왜냐하면 당신은 때때로 당신이 원하는 부모 클래스에는 있지만 클래스 그
 자체에는 정의되어있지 않은 메소드를 찾을 수 있기 때문이다.

 7. 당신이 반드시 알아야 하는 또 다른 복잡한 것이 있다. C++ 는
 "method overloading"이라고 불리는 기능을 가지고 있다. 이것은 C++프로그래머를
 다른 파라미터의 집합으로 알려진 다른 버전의 같은 메소드를 한가지 이상의
 버전에 대해 정의하도록 이끈다. 예를 들어, wxWindow.ConvertPixelsToDialog()
 메소드는 두 가지 정의를 가진다.
  wxPointConvertPixelsToDialg(const wxPoint& pt)
  wxSizeConvertPixelsToDialog(const wxSize& sz)
 같은 메소드 이름이지만, 다른 파라미터를 가진다. 파이썬은 메소드 오버러딩을
 필요로 하지 않거나 사용할 일이 없다. 따라서 wxPython에 있어 당신은 언제나
 메소드 정의에서 각각의 다른 버전에 대해 파이썬 이름으로 주어진 노트를
 찾아야 한다. 따라서 예를 들면, wxWindow.ConverPixelsToDialg() 메소드의
 목록은 다음 노트를 포함한다.
  wxPython note : In place of a single overloaded method name,
   wxPython Implements the following methods:
   ConverDialogPointToPixcels(point) : Accepts and returns a wxPoint
   ConverDialogSizeToPixels(size) : Accepts and returns a wxSize

 8. 마지막으로, 당신이 메소드 정의를 읽는 와중에 항상 wxPython 노트를
 주시하기 바란다. wxPython노트에 들어있는 정보는 언제나 그 어떤 wxWindows
 문서가 알려주는 모든 내용보다 우선되는 내용을 가지고 있다.


5. 요약
당신이 이 지침들을 기억하고 있는 한, C++로 씌여진 wxWindows문서를 해석하는 것이
이제는 어렵지 않을 것이다. 그것은 단지 그것이 C++에 특화된 복잡함 때문에 실제로
그런것 보다 아주 많이 복잡하게 보이는 것 뿐이다. 그렇지만 당신의 머리가 C++의
딱딱한 말투를 자동으로 걸러서 이해하는 데에는 많은 시간이 필요치 않을 것이다.
그리고 당신은 wxWindows 레퍼런스들을 C++이 아니라 파이썬으로 기술되어있는 것처럼
빠르게 사용할 수 있을 것이다.

행복한 파이썬 사용이 되기를, 그리고 당신의 모든 GUI들을 빠르게 사용하고
친근해지기를.
신고

 
 
 
태그 : GUI, Python, wxPython
트랙백0 | 댓글0
아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 



위치로그 : 태그 : 방명록 : 관리자
이우성's Blog is powered by Daum / Designed by SSen
관리자  |  글쓰기
BLOG main image
전, 이우성입니다. ( I am Woosung, Lee. ) ""
 Category
 Media
 TAGS
 Recent Entries
 Recent Comments
 Recent Trackbacks
 Calendar
 Archive
 Link Site
 Visitor Statistics
+ Total : 869,821
+ Today : 9
+ Yesterday : 83
카피
rss

티스토리 툴바