페이지

2009년 4월 23일 목요일

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월 3일 금요일

오픈웹 관련 만화 두편

오픈웹 이야기

kldp_linux_banking

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

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

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

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

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

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