Coding/Python Matlab

파이썬 - 기초부터 다시한번 확인...

smores 2012. 12. 20. 13:19

점프투파이썬 복습 내용 정리

http://codejob.co.kr/docs/view/2/



########################################################

03. 자료형과 제어문 » 1) 자료형 » [2] 문자열 (String)


print "=" * 50


a="abcd"


a.count(x)

a.upper()

a.lower()

a.find(x) -> if no existence, return -1

a.index(x) -> if no existence, error

a.join(s)

    >>> a= "," 

    >>> a.join('abcd')

    'a,b,c,d'

a.lstrip()

a.rstrip()

a.strip()

a.replace(s,r)

a.split([s])

a.swapcase()


########################################################

03. 자료형과 제어문 » 1) 자료형 » [3] 리스트 (List)


>>> a = [1, 2, 3]

>>> b = [4, 5, 6]

>>> a + b

[1, 2, 3, 4, 5, 6]


>>> a * 3

[1, 2, 3, 1, 2, 3, 1, 2, 3]


del a[1]


a.append(item)

a.sort()

a.reverse()

a.index(item) -> if no existence, error

a.insert(index#, item)

a.remove(index#)

b=a.pop([index#])

a.count(item)

a.extend(list) = a + list



########################################################

03. 자료형과 제어문 » 1) 자료형 » [4] 터플 (tuple)


tuple과 list의 차이점: tuple은 내용 변경 불가, list는 가능



########################################################

03. 자료형과 제어문 » 1) 자료형 » [5] 딕셔너리 (Dictionary)


dic = {Key1:Value1, Key2:Value2, Key3:Value3,,,,}

중복되는 키는 사용하지 말것


value = dic[key]   or   value = dic.get(key)

dic[newkey] = newvalue

del dic[key]


keylist = dic.keys()

valuelist = dic.values()

itemlist = dic.items() -> [(key1,val1),(key2,val2),...]

dic.clear()

dic.has_key(key) -> return True of False



########################################################

03. 자료형과 제어문 » 1) 자료형 » [6] 참과 거짓


False:  "", [], (), {}, 0, None


a = range(10)

while a: print a.pop()



########################################################

03. 자료형과 제어문 » 1) 자료형 » [7] 변수


simple variable swap

a,b = b,a


list copy

a=[1,2,3]

b=a  -> a의 reference 복사, 따라서 a를 바꾸면 b도 바뀜

value 복사를 위해서는 b=a[:]  

또는

from copy import copy

b=copy(a)


동일 객체 판단

a is b  -> True or False 반납받음



########################################################

03. 자료형과 제어문 » 2) 제어문 » [1] if문

03. 자료형과 제어문 » 2) 제어문 » [2] while문

03. 자료형과 제어문 » 2) 제어문 » [3] for문


x (not) in list/tuple/string


if <조건>:

elif <조건>:

else:


pass

continue

break



########################################################

04. 입출력 » 2) 입력과 출력


input() vs. raw_input() 

    input()은 숫자는 숫자로 받아들임

    input()은 문자열의 경우 반드시 '' 나 "" 로 감싸줘야함



########################################################

04. 입출력 » 3) 파일 읽고 쓰기


라인단위 읽기

readline(), readlines()  라인 끝에 \n 까지 붙어있음


f.read()

f.write()


import sys

args = sys.argv[1:]



########################################################

05. 파이썬 날개달기 » 1) 클래스


빈 instance 생성

class Simple:

    value = initial_value

    def f(self, a, b):  # 클래스 함수의 첫번째 변수는 항상 self

        . . .


x=Simple()

print x.value

r = x(a,b) # self 안써도 됨


__init__(self, ...)

__del__(self)


상속

class B(A):

    ....


연산자 overloading

__add__(self, other)


__init__    생성자(Constructor), 인스턴스가 만들어 질 때 호출     

__del__    소멸자(Destructor) 인스턴스가 사라질 때 호출    

__add__    연산자 "+"    X + Y

__or__    연산자 "|"    X | Y

__repr__    print    print X

__call__    함수호출 X()했을 때 호출     

__getattr__    자격부여    X.메소드

__getitem__    인덱싱    X[i]

__setitem__    인덱스 치환    X[key] = value

__getslice__    슬라이싱    X[i:j]

__cmp__    비교    X > Y



########################################################

05. 파이썬 날개달기 » 2) 모듈


import 모듈이름

모듈이름.함수명()


from 모듈이름 import 함수명

함수명()


import 모듈이름 as 단축이름

단축이름.함수명()


if __name__ == "__main__":


import sys

sys.path


sys.path에 원하는 디렉토리 추가하면 모듈을 아무곳에서나 쓸 수 있다.

sys.path.append("c:\\z")



import mod2

....

reload(mod2)


이미 import 한 모듈에 변경 사항이 발생했을 경우



########################################################

05. 파이썬 날개달기 » 3) 예외처리



try: 

    ...

except [발생에러[, 에러메시지변수]]:

    ...



에러 발생시키기 (raise)


class Bird:

    def fly(self):

        raise NotImplementedError



########################################################

05. 파이썬 날개달기 » 4) 라이브러리 » [1] 내장함수


abs()

char(i)

ord('a') -> ascii value return

cmp(x,y)  크기 비교

dir() 객체가 가지고 있는 변수나 함수 리스트

divmod(7,3) -> (2,1)

divmod(1.3, 0.2) -> (6.0, 0.099999999999999978)


enumerate

>>> for i, name in enumerate(['boby', 'foo', 'bar']):

...     print i, name

...

0 boby

1 foo

2 bar


c=eval('1+2')

exec("c=1+2")

execfile('sum.py')


filter

#filter1.py 

def positive(x): 

    return x > 0 

####

print filter(positive, [1,-3,2,0,-5,6])


apply(function, (args))


lambda

>>> print filter(lambda x: x > 0, [1,-3,2,0,-5,6]) 

[1, 2, 6]

>>> sum = lambda a, b: a+b 

>>> sum(3,4) 

7

>>> l = [lambda a,b:a+b, lambda a,b:a*b] 

>>> l 

[at 0x811eb2c>, at 0x811eb64>]

동일한 결과를 다음 방식으로

def f1(a,b):

    return a+b

def f2(a,b):

    return a*b

f=[f1,f2]

f[0](3,4)



id(object)

v = input([msg])

v = raw_input([msg])


hex(number)

oct(number)

int()

long()

float()

str(object)

len(s)

pow(x,y)

max(s)

min(s)

range(start,stop,step)

sorted(list)

type(object)


zip(seq1,seq2)

>>> a=[1,2,3,4]

>>> b=[1,2,3]

>>> zip(a,b)

[(1, 1), (2, 2), (3, 3)]


tupel(sequence)

>>> tuple("abc") 

('a', 'b', 'c') 

>>> tuple([1,2,3]) 

(1, 2, 3) 

>>> tuple((1,2,3)) 

(1, 2, 3)


isinstance(object, class) -> True or False


map

>>> def two_times(x): return x*2 

>>> map(two_times, [1,2,3,4]) 

[2, 4, 6, 8]

>>> map(lambda a: a*2, [1,2,3,4]) 

[2, 4, 6, 8]


reduce(function, sequence) : pop(0) 하면서 리스트 생성

# reduce1.py 

def test(x, y): 

    return x+y 

###

def test2(x, y): 

    return x*y 

###

print reduce(test, [1,2,3,4,5]) 

print reduce(test2, [1,2,3,4,5])


reload(module)


repr(object)

repr(object)은 객체를 출력할 수 있는 문자열 형태로 변환하여 돌려주는 함수이다. 이 변환된 값은 주로 eval 함수의 입력으로 쓰인다. str 함수와의 차이점이라면 str


으로 변환된 값은 eval의 입력값이 될 수 없는 경우가 있다는 것이다.

>>> repr("hi".upper()) 

"'HI'" 

>>> eval(repr("hi".upper())) 

'HI' 

>>> eval(str("hi".upper())) 

Traceback (innermost last): 

File "", line 1, in ? eval(str("hi".upper())) 

File "", line 0, in ? 

NameError: There is no variable named 'HI'



########################################################

05. 파이썬 날개달기 » 4) 라이브러리 » [2] 외장함수


sys.argv

# argv_test.py 

import sys 

print sys.argv


sys.exit()


sys.path

>>> import sys 

>>> sys.path 

['', 'c:\python21', 'c:\python21\dlls', 'c:\python21\lib', 'c:\python21\l 

ib\plat-win', 'c:\python21\lib\lib-tk'] 


pickle

>>> import pickle 

>>> f = open("test.txt", 'w') 

>>> data = {1: 'python', 2: 'you need'} 

>>> pickle.dump(data, f) 

>>> f.close()

>>> f = open("test.txt", 'r') 

>>> data = pickle.load(f) 

>>> print data 

{2:'you need', 1:'python'}


>>> import string 


>>> dir(string) 

['_StringType', '__builtins__', '__doc__', '__file__', '__name__', '_float', '_idmap', '_idmapL', '_int', 

'_long', 'atof', 'atof_error', 'atoi', 'atoi_error', 'atol', 'atol_error', 'capitalize', 'capwords', 

'center', 'count', 'digits', 'expandtabs', 'find', 'hexdigits', 'index', 'index_error', 'join', 'joinfields', 

'letters', 'ljust', 'lower', 'lowercase', 'lstrip', 'maketrans', 'octdigits', 'printable', 'punctuation', 

'replace', 'rfind', 'rindex', 'rjust', 'rstrip', 'split', 'splitfields', 'strip', 'swapcase', 'translate', 

'upper', 'uppercase', 'whitespace', 'zfill']


>>> string.split("you need python") 

['you', 'need', 'python'] 

>>> "you need python".split() 

['you', 'need', 'python']


>>> string.atof('3') 

3.0


>>> string.zfill(3, 8) 

'00000003' 

>>> string.zfill('a', 3) 

'00a'



>>> import StringIO  # 메모리에 임시 파일 생성

>>> f = StringIO.StringIO()

>>> f.write("life is too short")

>>> value = f.getvalue() 

>>> value 

'life is too short'

>>> f.close()  -> 메모리에 있는 파일 객체 없애버림



>>> import os 

>>> os.environ 

{'CMDLINE': 'WIN', 'PATH': 'C:\WINDOWS;C:\WINDOWS\COMMAND;C:\PROGRA~1\ULTRA 

EDT;C:\JDK1.3\BIN;C:\ESSOLO.COM;C:\VIM\VIM\VIM57;C:\PYTHON21', 'BLASTER': 

'A240 I10 D1', 'TEMP': 'C:\WINDOWS\TEMP', 'COMSPEC': 'C:\WINDOWS\COMMAND.CO 

M', 'PROMPT': '$p$g', 'WINBOOTDIR': 'C:\WINDOWS', 'WINDIR': 'C:\WINDOWS', 'TMP 

': 'C:\WINDOWS\TEMP'} 


>>> os.chdir("C:\WINDOWS") 

>>> os.getcwd() 

>>> os.system("dir")

>>> files = os.popen("dir") 


os.mkdir(디렉토리)    디렉토리를 생성한다.

os.rmdir(디렉토리)    디렉토리를 삭제한다.단, 디렉토리가 비어있어야 삭제가 가능하다.

os.unlink(파일)    파일을 지운다.

os.rename(src, dst)    src라는 이름의 파일을 dst라는 이름으로 바꾼다.



>>> import shutil 

>>> shutil.copy("src", "dst") # 파일 복사


>>> import glob 

>>> glob.glob("C:\Python\Q*") 

['C:\Python\quiz.py', 'C:\Python\quiz.py.bak'] 



>>> import tempfile 

>>> filename = tempfile.mktemp() # 스스로 중복되지 않는 파일 생성

>>> filename 

'C:\WINDOWS\TEMP\~-275151-0'


tempfile.TemporaryFile()은 임시적인 저장공간으로 사용될 파일 객체를 돌려준다. 기본적으로 w+b 의 모드를 갖는다. 이 파일객체는 f.close()가 호출될 때 자동으


로 사라지게 된다.




>>> import time 

>>> time.time() # 1970년 1월 1일 0시 0분 0초를 기준으로 지난 시간을 초단위로 돌려준다

988458015.73417199

>>> time.localtime(time.time()) 

(2001, 4, 28, 20, 48, 12, 5, 118, 0)

>>> time.asctime(time.localtime(time.time())) 

'Sat Apr 28 20:50:20 2001' 

>>> time.ctime()

'Sat Apr 28 20:56:31 2001'


time.strftime

time.strftime('출력할 형식포맷코드', time.localtime(time.time())) strftime 함수는 시간에 관계된 것을 세밀하게 표현할 수 있는 여러 가지 포맷코드를 제공해 준다


.

포맷코드 설명

%a 요일 줄임말 Mon

%A 요일 Monday

%b 달 줄임말 Jan

%B January

%c 날짜와 시간을 출력함(로케일 설정에 의한 형식에 맞추어) 06/01/01 17:22:21

%d 날(day) [00,31]

%H 시간(hour)-24시간 출력 형태 [00,23]

%I 시간(hour)-12시간 출력 형태 [01,12]

%j 1년 중 누적 날짜 [001,366]

%m [01,12]

%M [01,59]

%p AM or PM AM

%S [00,61]

%U 1년 중 누적 주-일요일을 시작으로 [00,53]

%w 숫자로 된 요일 [0(일요일),6]

%W 1년 중 누적 주-월요일을 시작으로 [00,53]

%x 현재 설정된 로케일에 기반한 날짜 출력 06/01/01

%X 현재 설정된 로케일에 기반한 시간 출력 17:22:21

%Y 년도 출력 2001

%Z 시간대 출력 대한민국 표준시

%% 문자 %  

%y 세기부분을 제외한 년도 출력 01

 

>>> import time

>>> time.strftime('%x', time.localtime(time.time()))

'05/01/01' 

>>> time.strftime('%c', time.localtime(time.time())) 

'05/01/01 17:22:21'


# time.sleep()

for i in range(10): 

    print i 

    time.sleep(1)


>>> import calendar 

>>> print calendar.calendar(2001)

>>> calendar.prcal(2001)


>>> calendar.weekday(2001, 4, 28) # return 요일, 0-Mon, 1-Tue...


>>> calendar.monthrange(2001,4) 

(6, 30) # 4월1일의 요일과 총 일수


>>> import random

>>> random.random() 

0.53840103305098674

>>> random.randint(1,10) 

6

>>> random.seed(seednumber)


파이썬 쓰레드 (thread)

# thread_test.py

import thread

import time

def say(msg):

    while 1:

        print msg

        time.sleep(1)

###

thread.start_new_thread(say, ('you',))

thread.start_new_thread(say, ('need',))

thread.start_new_thread(say, ('python',))

for i in range(100):

    print i

    time.sleep(0.1)



>>> import webbrowser 

>>> webbrowser.open("http://www.yahoo.co.kr")

>>> webbrowser.open_new("http://www.yahoo.co.kr")