Python시작

이번 년도 개강(?)부터 두어가지 목표를 두고 공부를 할 계획이다. 그렇지 않아도 매 년 적어도 한 개씩의 언어를 공부해보자는 의지가 2년째 지켜지지 않고 있어서 Python을 공부하려고 한다. 내 기억속에서는 모던-다이나믹-객체지향 언어의 시초로 기억되고 있어서 택했다.

마침 IronPython도 나왔고 하니 주력 언어인 C#과의 연결로 학습효과도 극대로 끌어 올릴 수 있고. 하지만 일단 그냥 Python을 어느 정도 마친 후에 IronPython으로 들어갈 계획. (당연한 이치~!)

여튼 시작이다.

IronPython for ASP.NET

바로 전 포스트에서  얘기했다시피 IronPython은 .NET으로 구현되어져있기때문에 IIS위에서 쌩쌩 잘 돌아간다. 돌아가게 하기위해서는 이런저런 작업이 필요하겠지만, Setting에 어려움이 있다고 느꼈는지 MS에서는 고맙게도 설치형(아직 CTP지만)으로 제공해주고 있다.  더욱 더 고맙게도 설치후에는 Visual Studio 2005 (혹은 Visual Web Develper 2005 Express)에 기능들이 추가된다.

IronPython for ASP.NET을 다운받으려면 여기를 클릭~

설치파일은 MWSetup.msi. 실행하고 완료하면 ProgramFiles에 Microsoft IronPython for ASP.NET폴더가 생긴다.  폴더로 가보면 “AddPyScriptMap.vbs”파일이 있다. 가볍게 실행~  이 파일은 간단히 말해서 .py를 .aspx(.cs)돌리듯이 돌리게 하는 스크립트다.

자 이제 Visual Studio 2005로 가서 새 웹사이트를 만들면 언어에 IronPython이 생긴 것을 볼 수 있을 것이다.

프로젝트 생성하면 Bin폴더에는 IronMath.dll, IronPython.dll, Microsoft.Web.IronPython.dll가 생기고, 루트에는 Global.py도 있고  App_Script폴더도 있다.  App_Code랑 비슷한 폴더인 듯 싶음.

기본 설정을 바꾸려면 아까의 Microsoft IronPython for ASP.NET폴더 밑의 WebAppTemplate를 바꿔주면 될듯하다. C#일때와 특별히 다른 것은 없으니 겁먹지 말고 아무거나 만들어보자.

<form id=”form1″ runat=”server”>
   <div>

      <asp:Label ID=”lbl1″ runat=”server” Text=”Hello, IronPython” />
      <asp:Button ID=”btn1″ runat=”server” Text=”Click ME!” OnClick=”btn1_Click”/>

   </div>
</form>

굵은 이탤릭부분을 추가한 후 F7키를 눌러 소스코드로 이동.

소스코드에는 익숙한 네임스페이스들(System이나 System.Data등등)은 보이지만 쫌 낯설게 보인다. C#일때와 마찬가지로 Page_Load는 기본적으로 추가되어져 있다.  여기서 주의할 점은 C#에서처럼 “디자인모드”에서 버튼을 더블클릭한다거나 하지 마시길. 이벤트 추가 절대 안됨. 손으로해야함;; 또 주의 점. “.”을 아무리 찍어도 Intellisense(자동완성)은 안먹는다. 자자 그럼 하려던 btn1_Click를 추가.  모두 손노가다.

def btn1_Click():
    lbl1.Text = “Hello, IronPython For ASP.NET”

지겹게 따라붙던 “object sender, EventArgs e”는 안써줘도 된다. F5를 눌러 실행. 매우 잘 될것이다!!

그러면 지겹게 따라붙던 sender나 EventArgs가 필요하다면? 그냥 붙여주면 된다. 둘 다 붙여주면 당연히 잘되고, 둘 중에 sender만 붙여주어도 된다.

def btn1_Click(sender):
    lbl1.Text = “Hello, IronPython For ASP.NET<br/>”+sender.ID

실행하면 역시나 너무너무~~ 잘된다.

여기서 특이할 만한점 하나

def btn1_Click(sender):
    lbl1.Text = “Hello, IronPython For ASP.NET<br/>”+sender

이건 될까?

안타깝게도 안된다. “스트링+객체”의 경우 C#은 객체를 자동으로 ToString해주었는데 IronPython은 ToString()을 명시적으로 불러줘야한다.

그럼 Python의 기본 기능들은 잘되는지 확인

def btn1_Click():
    sum = 0
    r = range(0,10)
    f = add(5)
    for x in r:
       sum += f(x)
    lbl1.Text = sum.ToString()    

def add(n):
    return lambda x: x + n

 내용인즉 “0~9까지 리스트를 만들고, 각 값에 5씩 더한후 리스트의 값들을 모두 더한다”임. 종합하자면 5부터 14까지 덧셈을 구한다는 것.

검산 : (5+14) * 10 / 2 = 95

lambda, range 등등 다 잘된다!!!

마지막으로 하나만 더

def btn1_Click():
    lbl1.Text = dir(lbl1).ToString()

편리한 dir기능.

잘된다!!~~~

IronPython 1

IronPython은 .NET 아키텍쳐 위에 문법으로 Python을 쓸 수 있게 하는 것이다. 문법 뿐이 아니라 .NET에서 사용 가능한 클래스들도 이용할 수 있어서 기존의 WinForm, DataSet 등을 Python문법 위에서 사용 할 수 있다.  내용(소스)을 보면 C#으로 Python을 구현하고 있다. (그렇다면 IronPython을 IIS위에서 돌릴 수 있다는 말)

다운은 여기서 받으면 된다.

몇 가지 사용평

- 빠른 개발(rapid development)을 목표로 만들었다지만 해본 결과 사실상 그렇게까지 빠른 것 같지는 않다. intellisense가 지원되지 않아서 소스 코드량은 좀 많더라도 그냥 C#쓰는게 더 빠를 것 같다.

- 원래 Python에서 잘되던 라이브러리가 잘 안돌아간다. FeedParser 좀 돌려보려는데 당췌 잘 되지를 않는다. 상황을 봐서는 이 외에도 많은 라이브러리들이 잘 안돌아 갈 것 같다.

- 일반 Python보다 Startup시간이 상~~당하게 길다.

설치한지 얼마 되지 않은 현재로서 아직까지 Python보다 눈에띄게 나은 점, C#보다 눈에띄게 나은 점은 찾기 힘듬.