페이지

2009년 4월 22일 수요일

Python 간략 정리

Python을 배우면서 틈틈히 정리한 내용을 공유합니다. 자주 쓰는 언어가 아니라 그런지 정말 잘 까먹게 되더군요.

그래서 이 문서, 저 코드를 보면서 간략하게 정리했습니다.

Python


1989년 12월 크리스마스를 심심하지 않게 보내려고, 네덜란드 암스테르담에 사는 귀도 반 로섬이 혼자 집에서 취미 삼아 재미로 개발한 프로젝트임. 연구실은 닫히고 집에서 특별히 할일이 없어서 개발했다고 함. 이름은 영국 드라마(Monty Python's Flying Circus)를 참고.

http://en.wikipedia.org/wiki/Guido_van_Rossum

Hello World 예제


  1. #!/usr/bin/python
    # hello.py
    print "Hello World\n"

chmod 755 hello.py

Commnet


  1. # 이것은 주석입니다.
  2. import sys   # 이것도 주석입니다.
  3. """
  4. 이것도 주석입니다.
  5. 여러줄을 주석처리할 때 사용합니다...
  6. """

Datatype


객체 자료형 상수와 사용법의 예
수치형(Numbers) 정수(2134), 실수(2.71), 롱형 정수(345L), 복소수(4+5j)
문자열(Strings) ‘spam’,“ eggs”
리스트(Lists) [1,‘ two’, 3, [5,‘ five’]]
사전(Dictionaries) { 'gslee':5284,'kslee':5582,'mylee':5382}
터플(Tuples) (1,3,’five’)
파일(Files) f = open( ‘toasts’)

정수형 상수

>>> a = 23 # 10진 상수
>>> b = 023 # 8진 상수, 0으로 시작하면 8진수이다.
>>> c = 0x23 # 16진 상수, 0x 혹은 0X로 시작하면 16진수다.
>>> print a, b, c # 10진수로 출력
23 19 35

실수형 상수

이렇게 한 줄에 여러 변수 값을 할당할 수 있다.

>>> e, f, g = 3.14, 2.16e-9, 3E220
>>> print e, f, g
3.14 2.16e-009 3e+220

Long 형 상수

>>> h = 123456789012345678901234567890L
>>> print h * h
15241578753238836750495351562536198787501905199875019052100L

유효 자리수는 메모리가 허용하는 만큼 가능하다.
복소수형 상수

>>> c = 4+5j
>>> d = 7-2J
>>> print c * d
(38+27j)

문자열

문자를 표현하기 위한 자료형
  1. print 'Hello World!'
  2. print "hello World!"

따옴표(Single Quotation mark), 큰 따옴표(Double Quotation Mark) 모두 사용된다.
리스트

  1. L = [1, 4, 3, 2, 5, 'aa']
    print len(L)
    print L[1:3]
    print L[5]
    print L+L
    print L*3

    L.append(6)
    print L
    L.reverse()
    print L
    L.sort()
    print L

list.py
튜플

튜플과 리스트의 차이는 튜플은 값 변경이 안되고, 리스트는 가능하다.
  1. t = (1, 4, 3, 2, 5)
  2. print len(t)
  3. print t[1:3]
  4. print t[1]
  5. print t+t
  6. print t*3

tuple.py
사전 만들기

아이템들은‘키’와‘값(value)’으로‘key:value’형식으로 구성된다.
>>> phone = {} # 공 사전 생성
>>> phone = {'jack':9465215, 'jim':6851325, 'Joseph':6584321} # 초기값 부여
>>> len(phone) # 사전의 크기(아이템의 개수)
3

  1. phone = {}
  2. phone = {'joone':12777347, 'minsoo':23443333, 'Soony':23454458}
  3. print len(phone)
  4. print 'the value of joone is %s' %  phone['joone']
  5. # 검색 추가 변경
  6. phone['jack'] = 33455634
  7. print phone
  8. phone['joone']= 1111111# 삭제
  9. del phone['jack']
  10. print phone# 키, 값, 아이템 얻기
  11. print phone.keys();
  12. print phone.values();
  13. print phone.items();
  14. # 키보드로부터 키 스트링(이름) 입력을 받는다. ‘name?’은 프롬프트다.
  15. name = raw_input('name?')
  16. # 키를 가지고 있는지 검사
  17. if phone.has_key(name):
  18. print phone[name] # 있으면 전화번호 출력
  19. else:
  20. print name,'not found' #없으면

dic.py

관계연산자(relational operator)


> 크다
< 작다
>= 크거나 같다
<= 작거나 같다
== 같다
!= 같지 않다
<> 같지 않다

포맷 스트링


  1. s3 = 'Hi %s! How are you doing?'
  2. print s3 % "joone"
  3. s4 = '%s * %s = %s'
  4. print s4 % (12, 23, 12*23)
  5. print '%5d %o %x %5.2f' % (23, 23, 23, 43.123)

제어문


파이썬은 단순하게 if, for, while이라는 3개의 제어문을 갖고 있다.
if 문

  1. n = int(raw_input('value?'))
  2. if n > 0:
  3. print 'positive'
  4. elif n < 0:
  5. print 'negative'
  6. else:
  7. print 'zero'

한 가지 주의 깊게 봐야 할 점이 있는데 들여쓰기(indentation)이다. 즉, if - elif - else는 같은 열에 있어야 하고, 세 개의 print 문은 탭
혹은 같은 수의 스페이스를 이용해 들여쓰기를 한다. 파이썬에서는 이와 같은 들여쓰기 필수다.
for 문

  1. a = [0,1,2,3]
    for x in a:      # a에 있는 모든 x에 대해
    print x,    # x값 출력

  1. for x in range(100):
  2. print x

순차적으로 숫자를 증가시켜가면서 반복할 경우에는 range함수를 이용한다
while문

  1. a, b = 0, 1
    while b < 100:
    print b,
    a, b = b, a+b

함수 정의와 호출


def 함수명 (인수들..):
문(statements)
return <값>

  1. def add(a, b):
  2. return a+b
  3. print add(1,2)

  1. add(int, int);
    add(int, double);
    add(double, int);
    add(double, double);

파이썬은 자료형을 동적으로 결정하므로 다른 언어에서 해야 하는 많은 중복(overloading) 작업을 피하게 해준다.

파일 입출력


  • 파이썬의 파일 입출력(File I/O) 기능은 C에서 사용하는 함수를 확장한 것
  • C의 래퍼(wrapper)로서 대부분의 C 파일 입출력 기능과 추가적인 편의 함수를 제공
  • 파일을 사용하기에 앞서 우선 파일을 오픈해야 하는데,
  • 이때 파일명과 처리 모드를 인수로 넘겨줘야 한다. 처리 모드는‘w:쓰기, r:읽기, a:추가하기’이다.

  1. f = open(‘testfile’, ‘w’)                  # 쓰기 모드로 testfile을 오픈한다.
    f.write(‘파이썬 파일 쓰기 테스트 중이예요!\n’)    # 문자열을 출력한다
    f.close()                                  # 파일을 닫는다. 생략 가능

읽기 쓰기 메쏘드
파일 객체의 . 더 다양한 메쏘드에 대해 배워보자. 먼저 읽기를 위한 메쏘드는

read()     파일 전체 내용을 한꺼번에 문자열로 읽어들인다

read(N)   N의 양의 정수만큼 읽기

readline()  한줄씩 읽기

readlines() 파일 전체를 라인단위로 끊어서 리스트에 저장한다
write(S), writelines(L)

파일 목록 읽기


  1. #!/usr/bin/python
    # file : readfiles.py

    import sys
    import os

    def main(argv):
    fileNames = os.listdir(argv[0])
    fileNames.sort()

    for fileName in fileNames:
    print '%s/%s' % (argv[0], fileName)

    if __name__=="__main__":
    main(sys.argv[1:])

명령행 인수 처리


  1. import sys # for handling argv
    import re   # import regular expression module for using subn

    def replace(fname, srcstr, deststr):
    f = open(fname)
    txt = f.read()
    txt = re.subn(srcstr, deststr, txt)[0]
    return txt

    if __name__ == '__main__':
    if len(sys.argv) != 4:
    print "Usage : replace filename srcstr deststr"
    sys.exit()
    print replace(sys.argv[1], sys.argv[2], sys.argv[3])

command.py
  1. import sys
    import os
  2. def main(argv):
    for arg in argv:
    print arg
    if __name__=="__main__":
    main(sys.argv[1:])

OOP


  1. class MyClass:
  2. def setValue(self, val):
  3. self.value = val;
  4. def getValue(self):
  5. print self.value
  6. c = MyClass()
  7. c.setValue('Hello')
  8. c.getValue()

oop.py

Debugging


python -m pdb oop.py

참고문헌


  • 이강성, 파이썬의 기본 구문과 기초자료형 이해, 마이크로소프트웨어 2000년 7월호

This article was written in springnote.

2009년 4월 2일 목요일

오픈웹 관련 만화 두편

오픈웹 이야기

kldp_linux_banking

몇 년전에 그린 그림인데, 아직도 상황은 변한게 없군요~ :-(

고려대 김기창 교수님이 이끄는 오픈웹이 금결원과의 민사 소송 2심에서 패소한 이후, 오픈웹(OpenWeb)에 대한 많은 이야기가 인터넷을 달구고 있습니다.

저도 오픈웹 운동이 시작된 이후로, 꾸준히 관심을 가지고 동참하고 있었는데, 정말 안타깝습니다.

ActiveX라는 거대한 폭탄을 안고 있는 국내 사용자들은 Windows와 Intenet Explorer를 업그레이드 할 때 마다  끊임 없이 발생하는 크고 작은 문제들로 불편함을 겪고 있습니다. 또한 맥과 리눅스 사용자는 브라우저를 통해 금융 거래를 아직까지 못하고 있습니다.

하지만, 여전히 개선될 희망이 보이지 않고 있습니다.

이러한 상황에서 가뜩히나 월드 가든(Walled Garden)에 갖혀버린 우리나라의 모바일 웹은 뿌리를 내릴 수 있을까요?

2009년 3월 27일 금요일

Fennec 드디어 미라지에서 동작하다

jemalloc을 enable하고 Windows Mobile 용 Fennec을 정상 동작시켰다는 Blassey의 블로그를 보고 , trunk에 있는 코드를 업데이트 하여, 빌드를 다시 했습니다. cab installer를 만들어 설치를 했으나... 심하게 화면이 깨지는 현상이 나타났습니다. 상황이 더 안 좋아진 것이죠.

jemalloc이 아직 기본으로  enable되어 있지 않은 것이 문제였습니다. 다시 mozconfig파일에 "ac_add_options --enable-jemalloc" 옵션을 추가한 후, 다시 빌드하니 드디어 저도 삼성 미라지폰(i780)에서도 아래와 같이 Fennec이 동작하는 것을 확인할 수 있었습니다. :-)

Fennec1.0 alpha for Windows Mobile Fennec1.0 alpha for Windows Mobile
그 동안 수 차례 미라지를 비롯한 옴니아에도 사용을 시도했으나  웹페이지가 화면에 그려지지 않는 현상 때문에 제대로 Fennec을 사용할 수 없었습니다.

하지만, 아직 alpha이기 (정식 릴리스된 Alpha는 아닙니다) 때문에 일반 사용자가 사용할 만한 수준은 못 됩니다. 특히 성능 문제가 심각한데, Launching 시간이 약 60초 정도 걸리고 여러 instance가 동시에 실행되기도 합니다.

또한, 미라지에서 URL입력할 때, soft keyboard가 귀찮게 나타나고 있고,  위와 같이 화면에 IME 버튼이 계속 남아 있는 현상도 있습니다. 보시다시피 한글도 제대로 표시가 안되고 있고요.

아직 갈 길이 멀기 때문에 열심히 bugzilla에 이러한 현상을 보고하고 문제를 해결해 보려고 합니다.