우선 파이썬에서 한글을 쓰기 위해서는

#coding: euc-kr

위 문법을 맨위에 삽입해 준다.

 

 

문자열

 

+연산은 오로지 문자열만 연결한다.

 

수리 계산은 init(), float() 함수로 반드시 변환해야 한다.

z = init(x) + init(y)

 

str()

print시 문자열 변환 함수: str()는 3.4입력시 3.4가 나온다.

 

 

repr()

print는 문자열 변환 함수: repr()는 3.4입력시 3.39999가 나온다.

 

 

format()

 

foramt은 정해진 ofrmat으로 출력을 한다.

format(x,"0.5f ")

 

리스트(List)

 

names = ["a", "b", "c", "d"]

a = names[2]

 

names.append("Paula") # 리스트 가운데의 항목을 교체 한다.

 

b = names[0:2]

 

리스트 연결시 플러스(+)연산자를 사용 한다.

 

빈 리스트 생성

names = []

names = list()

 

import sys
if len(sys.argv) != 2 :
    print "Please supply a filename"
    raise SystemExit(1)

f = open(sys.argv[1])
lines = f.readlines()
f.close()

fvalues = [float(line) for line in lines]

print "min", min(fvalues)
print "max", max(fvalues)

 

 

튜플(tuple)

 

stock = ('GOOG', 100, 490.10)

stock = 'GOOG', 100 ,490.10

 

튜플과 리스트의 가장 큰 차이점은 한번 정의되면 수정 되어질 수 없다는 것이다.

 

하지만 성능 최적화를 위해서는 튜플을 사용하는것이 더 좋다.

왜냐하면 튜플은 수정이 되지 않기 때문에 over memory alloacate를 하지 않는다.

 

List와 Tuple의 코드상에서 구분하는 방법은 대괄호와 소괄호의 차이점으로 구별 한다

 

튜플과 리스트를 함께 사용하는 예제)

#coding: euc-kr

filename = "int"
portfolio = []
for line in open(filename):
    fields = line.split(",") #줄을 분할해서 , 단위로 리스트를 만든다.
   
    #리스트를 각 타입에 맞게 변환 한다.
    name = fields[0]
    shares = int(fields[1])
    price = float(fields[2])
   
    #튜플을 만든다.
    stock = (name, shares, price)
   
    #투플을 리스트에 추가 한다.
    portfolio.append(s 

 

 

 

집합(set)

 

집합은 객체들의 순서 없는 모음을 담는데 사용된다. 집합은 다음과 같이 set()함수에 일련의 항목들을 넘겨 주어 생성 한다.

 

s = set ([3,5,9,10])

리스트나 튜플과는 달리, 집합은 순서가 없기 때문에 숫자로 색인될 수 없다. 게다가, 집합은 요소가 중복되는 일이 없다.

 

즉, t = set("Hello")

set(['H','e','l','o']) 이와 같이 l이 한번만 나타나게 되는 것이다.

 

집합 연산자를 사용 할 수 있다.

 

또한 집합에 아이템이 추가될수도 삭제될 수도 있다.

add()

update()

remove()

 

사전(dictionary)

 

사전은 키로 색인되는 객체들을 담는 연관 배열 혹은 해시 테이블이다.

다음과 같이 값들을 중괄호({})로 둘러싸서 사전을 생성 한다.

 

stock = {

"name" : "GOOG",

"shares" : 100,

"price" : 490.10

}

 

키로 접근해서 자료를 꺼내오거나 갱신 한다.

객체 추가 및 수정은

stock["shares"] = 75

stock["date"] = "June 7, 2007"

주로 문자열이 키로 사용되지만, 숫자나 튜플 같은 다른 파이썬 객체도 키로 사용될 수 있다.

 

사전은 이름 있는 필드들로 구성되는 객체를 정의하는 데 유용하게 쓰인다.

하지만, 사전은 순서 구분 없는 데이터를 빠르게 검색하기 위한 용도의 컨테이너로도 사용 된다.

 

빈사전을 만드는 방법

 

prices = {}

prices = dict()

 

사전에 어떻게 키가 들어있는지 확인 하는 방법

1) 방법 in 연산자의 활용

if "SCOX" in prices:

p = prices["SCOX"]

else:

p = 0.0

2) 방법

p = prices.get("SCOX",0.0)

 

사전의 키 목록을 얻고 싶으면 사전을 리스트로 변환하면 된다.

syms = list(prices)

# syms에는 "AAPL", 등..이 연속해서 저장되어진다.

 

del prices["MSFT"]

 

사전은 파이썬의 꽃이다. 따라서 이것을 잘 사용하는것이 좋다.

 

 

반복과 루프

 

for를 이용해서 가장 간단하게 루프를 도는 형태는 간단히 문자열, 리스트, 튜플 같은 순서열의 모든 구성요소에 대해 루프를 도는 것이다. 다음은 한 예이다.

 

#coding: euc-kr

f = open("int")
for line in f:
    print line

 

 

 

함수

 

다음 예처럼 함수는 def문을 사용해 생성한다.

 

#coding: euc-kr

def remainder(a,b):
    q = a // b
    r = a - q*b
   
    return r

result = remainder(37,15)

print result 

 

 

 

특이한점

리턴이 2개 이상일 수 있다.

 

return (a,b)

 

a,b = func()

 

인자의 초기 값이 있을 수 있다.

 

저역 변수를 수정 할 때에는 global이라는 keyword를 사용 한다.

 

생성기

 

함수는 단일 값을 변환하는 대신, yield문을 사용해 일련의 결과 값을 생성할 수도 있다.

def countdown(n):
    print "Counting down!"
    while n > 0:
        yield n # 값(n)을 생성한다.
        n -= 1

c = countdown(5);

for i in countdown(5):

 

 

yield를 사용하는 함수를 생성기(generator)라고 부른다. 생성기 함수를 호출하면, next() 메서드를 호출 하면 일련의 결과를 반환하게 된다.

 

 

생성기는 처리 파이프라인, 스트림, 데이터 흐름에 기반한 프로그램을 작성할 때 강력한 위력을 발휘 한다. 예를 들어, 다음 생성기 함수는 로그 파일을 검토하는 데 흔히 사용되는 유닉스의 tail -f 명령의 동작을 흉내낸다.

 

리눅스 명령어중 grep을 흉내낸 파이썬 코드이다.

 def grep(lines, searchtext):
    for line in lines:
        if searchtext in line: yield line

       
f = open("int")

lines = f.readlines()

c = grep(lines,"MS")

print c.next() 

 

 

리눅스 명령어 "tail -f | grep python"를 구현 하겠다.

즉 2개의 generatior를 연결 시켜서 리눅스의 파이프라인을 구현한 간단한 예이다.

 

#coding: euc-kr
import time

def tail(f):
    f.seek(0.2)
    while True:
        line = f.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line

def grep(lines, searchtext):
    for line in lines:
        if searchtext in line: yield line
       
#f = open("int")
#lines = f.readlines()
#c = grep(lines,"MS")
#print c.next()

wwwlog = tail(open("int"))
#f = open("int")
#lines = f.readlines()
pylines = grep(wwwlog,"MS")

for line in pylines:
    print line,

 

 

 

 

 

 

코루틴

 

보통 함수는 입력으로 주어진 인수에 대해서 한 번만 실행된다. 하지만, 일련의 입력을 처리하도록 함수를 작성할 수도 있다. 이런 종류의 함수를 coroutine이라고 한다.

 

yield는 그냥 쓰면 generator이지만, ()를 양 옆에 달게 되면 coroutine이 된다.

 

 

def print_matches(matchtext):
    print "Looking for", matchtext
    while True:
        line = (yield)
        if matchtext in line:
            print line

#matchtext로 초기화 한다음

#matcher.send()를해서 해당 문자열이 있는지 검사하게 만들 수 있다.

 

 

 코루틴은 send()로 값이 도착할 때까지 멈춰 있는다.

send()가 호출되면, 코루틴 안에서 yield 표현식을 만날 때까지 계속되고, 그 순간 함수가 다시 멈춘다.

앞의 예에서 보았듯이, 이 과정은 close()가 호출될 때까지 이어진다.

 

코루틴은 프로그램의 한 곳에서 생성된 데이터를 다른 곳에서 소비하는 생성자 소비자 모델이 기반한 병행 프로그램을 작성할 때 유용하게 쓰인다. 이 모델에서 코루틴은 데이터 소비자의 역할을 수행한다. 다음은 생성기와 코루틴을 결합하는 예이다.

 

 

객체와 클래스

객체에 정의된 메서드를 살펴 보고 싶을 경우

dir(object)를 하면 알 수 있다.

 

이렇게해서 메서드를 확인할 경우 __메서드__ 와 같이 이중 언더바로 시작하고 끝나는 특수한 메서드들을 볼 수 있다.

 

 

 

 

 #coding: euc-kr

class Stack(list):
    def push(self,object):
        self.append(object)

s = Stack() # 스택을 생성한다.
s.push("Dave")
s.push(42)
s.push([3,4,5])

print s.pop()
print s.pop()

 

 

C++ / java 프로그래밍에서 쓰는 정적 메서드 또한 사용 할 수 있다.

@staticmethod

 

예외

 

try이와 except문으로 예외를 잡아서 처리 할 수 있다.

 

#coding: euc-kr

try:
    f = open("int2","r")
except IOError as e:
    print e 

 

 

IOError가 발생하면, 에러의 원인에 대한 내용이 e에 담기고 except 블록으로 제어가 넘어간다.

 

 

모듈

 

프로그램 크기가 커지면 손쉬운 관리를 위해 프로그램을 여러 파일로 나누고 싶어 질 것이다.

파이썬에서는 정의들을 파일에 넣어 다른 프로그램이나 스크립트에 Import할 수 있는 모듈의 형태로 사용할 수 있다.

 

모듈을 생성하려면 관련문장과 정의들을 모듈과 동일한 이름을 가지는 파일에 넣으면 된다.

 '''
Created on 2012. 6. 30.

@author: root
'''

def divide(a,b):
    q = a/b
    r = a -q*b
    return(q,r)

 

 

 #coding: euc-kr

import div as foo

a,b = foo.divide(2305,29)

print "%d %d" %(a,b)   

 

 

 

도움

 

dir(package name)

 

print packagename.__함수__

 

위와 같이 입력하면 해당함수의 사용법을 알 수 있다.

 

 

 

 

'Computer Science > Python' 카테고리의 다른 글

GUI 프로그래밍  (0) 2013.06.23
ImageMagick for Python  (0) 2013.05.07
7장 클래스와 객체지향 프로그래밍  (0) 2012.07.03
3장 타입과 객체  (0) 2012.07.01
2장 어휘 규약과 구문  (0) 2012.07.01
1장 파이썬 맛보기  (1) 2012.06.21
  1. halong bay 2016.04.06 18:53 신고

    위대한 스크립트 주셔서 감사합니다

+ Recent posts