댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
Python
2013.04.08 13:09
python 문법요약
조회 수 30643 댓글 0
Python 문법정리 출처 : http://turing.cafe24.com/ 자료정리 : 홍 지 영 I. 개발 환경 사용법 1. 인터프리터 모드 1.1 IDLE(Python GUI) 실행 : 인터프리터 모드로 실행된다. - python Shell 이라는 창이 뜨며 여기서 인터프리터 모드로 작업할 수 있다. - 인터프리터 모드에서는 한줄씩 실행된다. - 디폴트 프롬프트는 ‘>>>’ 이다. - 변수명을 치면 변수의 내용을 볼 수 있다. - 함수, 제어문 등 여러 줄로 써야 하는 명령어를 쓰는 경우 프롬프트가 나오지 않고 indentation 된 상태에서 다음 입력을 기다린다. 입력이 끝나면 <엔터>를 한번 더 치면 프롬프트가 뜬다. - 기존에 입력한 함수나 제어문을 다시 편집하려면 해당 함수 위치에 가서 더블클릭한다. 그러면 입력된 함수 전체가 창 하단에 다시 출력되고 커서가 그 안에 위치한다. - Copy, Cut, Paste 가 가능하다. 단 indentation 에 주의해야 한다. 1.2 Python(Command Line ) 실행 - DOS 창 CommandLine에서 실행된다. - 인터프리터 모드에서 실행된다. 2. 텍스트 파일의 편집과 실행 2.1 텍스트 파일의 편집 - 메모장과 같은 텍스트 편집기를 사용할 수 있다. - python shell에서 기존 텍스트 파일을 open 하거나 New window를 선택하여 자체 편집기를 사용할 수도 있다. - 편집이 완료되면 확장자를 'py' 로 하여 저장한다. (xxxx.py) 2.2 텍스트 파일의 실행 - 도스창에서 파이선 설치 디렉토리 (C:\python) 로 이동한 뒤 python <파일명> 으로 실행한다. 2.3 실행 파일로 컴파일 - py2exe 라는 툴을 사용해야만 컴파일 할 수 있다. (별도로 다운로드 해야 함.) 기본 문법 * 주석 입력 : ‘#’ 이후의 문장은 주석으로 인식 * 대소문자를 구별한다. 연산자 x**2 : x 의 제곱 x % 2 : x 를 2로 나눈 나머지 a == b : a는 b 와 같다 + : 산술연산자, 문자열 결합 연산자 자료형 * 자료형 : 수치형(numbers), 순서형(sequence), 매핑형(mapping) 1. 수치형(numbers) 1) int : -21억 ~ +21 억 (32bit) 2) long int : +-922경(9.2*10^18,64bit) , 표기 : 접미사 L (예: 216800L) 3) float : 부동소숫점 수 2. 순서형(sequence) : 1) 문자열(string) : 홑따옴표와 겹따옴표를 모두 사용 가능 특수문자, 따옴표는 / 와 함께 입력 (예: /n 줄바꿈, /“ 따옴표 표시) 2) 리스트(list) : 대괄호([]) 사용, 엔티티의 집합. 예) a=[1,2,3,4,5] 3) 튜플(tuple) : 소괄호({}) 사용, 순서있는 집합(?) 예:(a,b)=(1,2) a와 b 각각 1,2 들어감 예) a=(1,2,3,4,5) 4) 사용자 정의 클래스 3. 매핑형(mapping) 1) 사전(dictionary) : 키(key) 와 내용의 쌍의 집합. 해쉬(키 탐색) 기능 있음. 2) 클래스 인스턴스 3) C 확장형 * 자료형의 확인 : Type 함수 >>> type('A') ==> <type 'string'> 문자열 >>> type(6) ==> <type 'int'> >>> type(2.8) ==> <type 'float'> >>> type(3+4j) ==> <type 'complex'> 복소수 >>> type([1, 2, 3, 4]) ==> <type 'list'> * 자료형 변환 숫자형 => 스트링 : str() >>>str(1)+str(2) 12 제어문 * 제어문은 조건식 뒤에 ‘:’을 붙여야 시작된다. * 입력이 끝나는 지점은 indentation 을 한 단계 앞으로 줌으로써 확인된다. <While> num = 1 while num <= 100: print num num = num + 1 <IF> >>> if c > d: ... print 'c > d' ... elif c == d: ... print 'c == d' ... else: ... print 'c < d' ... <FOR> for x in family: # family라는 리스트의 각각의 원소 x에 대하여: print x, len(x) # x와 x의 길이를 출력하라. for i in range(4,8): (4이상 8미만) print i 함수 1. 일반 함수 def <함수명>(<매개변수1>,<매개변수2>,...) : <Function:함수> def function(x): ... a = 3 ... b = 5 ... y = a*x + b ... return y : 정의 완료시 한줄 뗌, return 문을 만나면 함수 탈출 : 함수 정의는 호출 뒤에 해도 됨, : 함수의 정의와 선언이 한꺼번에 이루어짐.
2. 인라인(?) 함수 labmda <값1>,<값2>...:<수행할 식> (<입력값1>,<입력값2>) >>>(lambda x,y: x+y)(10, 20) 30 3. map 함수 : lambda 함수에 리스트를 적용 <map(함수,리스트)> : 함수에 리스트를 적용 리스트로 리턴 map(lambda x: x**2, range(5)) [0, 1, 4, 9, 16] 4. reduce 함수 : lamda 함수에 리스트를 적용하여 누적 결과 표시 <reduce(함수, 순서형 자료)> : 누적적용 수 리턴 >>> reduce(lambda x,y: x+y, [0,1,2,3,4]) 10 >>> reduce(lambda x,y: y+x, 'abcde') 'edcba' 4. filter 함수 : 리스트를 입력으로 받아 조건식에 의해 filtering <filter(함수, 리스트)> : 범위내만 리스트 >>> filter(lambda x: x<5, range(10)) [0, 1, 2, 3, 4] >>> filter(lambda x: x%2, range(10)) # 홀수만돌려주기 [1, 3, 5, 7, 9] 문자열 처리 ======= 문자열 처리 ========== 기본적으로 list 사용법에 준함 <부분문자열 표시> >>> x="abcdef" >>> x 'abcdef' >>> x[0] 'a' >>> x[1] 'b' >>> x[1:3] #1번이상 3번‘미만’ 'bc' >>> x[:3] #처음부터 3번‘미만’까지 'abc' >>> x[3:] #3번‘이후’부터 끝까지 'def' <문자열 변경> banana => nanana >>> x = 'n' + x[1:] # ‘n' + 1번 이후까지 >>> x 'nanana' 리스트 처리 * 정의하기 : a = ['a', 'b', 'c', 'd'] / a=[] 빈 리스트 * 요소의 개수 : len(a) * 요소 출력 : a[2] : 3 번째 요소('c') 출력 (인덱스는 0부터 시작한다.) * 요소 수정 a=[1,3,5,7] 일때 a[1] =9 ==> [1,9,5,7] * 범위에 의한 리스트 생성 : range (n1이상,n2미만) a=range(2,7) ==> [2, 3, 4, 5, 6] a=range(5) ==> [0,1,2,3,4] * 요소 추가 : append 메소드, 맨뒤에 추가 a=[1,3,5,7] a.append(2) ==> [1, 3, 5, 7, 2] * 특정 요소 삭제 : a.remove('a') => [‘b','c','d'] * 위치에 따른 요소 삭제 : del 명령 a=[1,3,5,7] 일때 del a[2] ==> [1, 3, 7] * 소트 : sort() 메소드 a=[2,1,5,3] 일때 a.sort() ==> [1,2,3,5] # prime을 원소 크기 순으로 정렬 * 다차원 리스트 >>> orders = ['potato', ['pizza', 'Coke', 'salad'], 'hamburger'] >>> orders[1] ['pizza', 'Coke', 'salad'] >>> orders[1][2] 'salad' >>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] * 문자열을 리스트로 변경 >>> list=[] >>> string = 'Be happy!' >>> for x in string: list.append(x) >>> print list ['B', 'e', ' ', 'h', 'a', 'p', 'p', 'y', '!'] 튜플(Tuple) : '한 벌 이란 뜻‘ * 여러 개의 연속 수 나열의 대응관계를 지정(?) <여러 변수 동시 지정> (a,b)=(1,2) ==> a=1<엔터>b=2 와 같다. <SWAP하기> >>> c = 10 >>> d = 20 >>> c, d = d, c # 컴마만 있어도 튜플로 인식된다. >>> print c,d 20 10 >>> def multi_print(x, y, *rest): # 마구찍어 함수 * 는 optional 한 입력을 뜻함 ... print x, y, rest ... >>> multi_print(1,2,3,5,6,7,9,10) 1 2 (3, 5, 6, 7, 9, 10) ==> (3...10) 은 튜플 >>> a = ('a', 'b', 'c') >>> a = () ==> 원소가 없는 튜플 >>> a = 5, ==> 원소가 하나인 튜플 (컴마를 찍어야 튜플로 인식) <수정> >>> p = (1,2,3) >>> q = p[:1] + (5,) + p[2:] ==> (1, 5, 3) <튜플과 리스트를 상호전환> >>> p = (1, 2, 3) >>> q = list(p) # 튜플 p로 리스트 q를 만듦 [1, 2, 3] >>> r = tuple(q) # 리스트 q로 튜플 r을 만듦 (1, 2, 3) 사전(Dictionary) 사전 자료형은 키 : 값의 쌍, 중괄호를 이용 >>> a={} # 빈 dictionary 정의 >>> a['dog']='bark' # dog 키에 bark 값 입력 >>> a['cat']='cat' >>> a {'dog': 'bark', 'cat': 'cat'} # 출력 형태 >>> a['dog'] # 키에 의한 값 찾기 'bark' >>> a['cat'] 'cat' * 축약형 dictionary >>> a = {'dog' : 'bark', 'cat' : 'meow'} >>> a['dog'] # 포켓용 사전아, ‘python’이 뭐니?? 'snake' * 요소쌍 삭제 >>> del a['dog'] {'cat': 'meow'} * key , value를 각각 리스트로 저장 >>> family = {'boy':'David', 'girl':'Eliza', 'baby':'Erasmus'} >>> family # 값을 넣는 순서대로 저장되지는 않음. {'baby': 'Erasmus', 'boy': 'David', 'girl': 'Eliza'} >>> family.keys() # 사전 family의 key들을 새로운 리스트에 담는다. ['baby', 'boy', 'girl'] >>> family.values() # 사전 family의 값들을 새로운 리스트에 담는다. ['Erasmus', 'David', 'Eliza'] * key 검색 has_key : 사전에 어떤 키가 있는지? 있으면 1, 없으면 0 >>> family.has_key('boy') ==> 1 >>> family.has_key('sister') ==> 0 ======= Stack ========== <푸시:append> >>> list=[] >>> for i in range(5): ... list.append(i) ... >>> list [0, 1, 2, 3, 4] <제거:pop> >>> list.pop() 4 >>> list [0, 1, 2, 3] ====== Queue ====== >>> list=['1', 'Python', 'Hahaha', 'Queue'] >>> list.pop(0) '1' >>> list ['Python', 'Hahaha', 'Queue'] ===== DOS 창에서 입력받기 ======== c = raw_input() '숫자입력받기 ======= 모듈 ======== >>> import math # math 모듈을 불러온다 >>> math.pi # math 모듈의 변수 pi의 값은? 3.1415926535897931 <달력> >>> import calendar >>> calendar.prmonth(2001, 6) <GUI> from Tkinter import * widget = Label(None, text='I love Python!') widget.pack() <모듈의 위치> Lib/calendar.py <모듈 내 함수 호출> >>>calendar.isleap(2000) # calendar 모듈의 isleap 함수를 호출 1 <모듈 사용> import 모듈이름 ==> 모듈 전체 , 사용시 모듈명.함수명 형태로 써야 함. from 모듈 import 변수나 함수 ==> 일부, 사용시 함수명만 사용가능 >>> import Tkinter >>> Tkinter.widget = Tkinter.Label(None, text='I love Python!') >>> Tkinter.widget.pack() >>> from Tkinter import * >>> widget = Label(None, text='I love Python!') >>> widget.pack() <모듈 제거> del 모듈 <불러온 모듈 다시 불러오기> reload(모듈) <모듈 모음> sys.ps1 : 프롬프트 sys.exit() : 끝내기 os.getcwd() # 현재 작업 디렉토리? =>'C:\CJKPython23' os.listdir('c:\CJKPython23') # 현재 디렉토리의 파일 목록? ['LICENSE.txt', 'README.txt', 'NEWS.txt', 'py.ico' >>> os.rename('README.txt', 'readme.txt') # README.txt를 readme.txt로 바 꿈 None >>> import string >>> string.capitalize('python') # 첫 글자를 대문자로 'Python' >>> string.replace('simple', 'i', 'a') #‘simple’의 ‘i’를 ‘a’로 바꿈 'sample' >>> string.split('break into words') # 문자열을 분리한 리스트 구함 ['break', 'into', 'words'] < re(regular expression : 정규 표현식)모듈> 현재 디렉토리에서 p 다음에 n이 나오는 이름을 갖고 있는 파일들 마침표(.)는 문자 아무거나 한 개 별표(*)는 한 개 이상의 문자 >>> import re, glob >>> p = re.compile('.*p.*n.*') >>> for i in glob.glob('*'): ... m = p.match(i) ... if m: ... print m.group() ... pycon.ico python.exe pythonw.exe w9xpopen.exe <webbrowser> >>> import webbrowser >>> url ='http://home.hanmir.com/~johnsonj/' >>> webbrowser.open(url) <Random> >>> import random >>> random.random() 0.90389642027948769 <randrange() > >>> random.randrange(1, 7) # 1이상 7미만의 난수 6 <shuffle()> : 순서형 자료(sequence)를 섞어놓는 함수 >>> abc = ['a', 'b', 'c', 'd', 'e'] >>> random.shuffle(abc) >>> abc ['a', 'd', 'e', 'b', 'c'] <choice() : 리스트에서 아무 원소나 하나 뽑아줌> >>> abc=['e', 'd', 'a', 'c', 'b'] >>> random.choice(abc) 'a' ======== 파일 처리 ======== <Read> : Close 안해도됨 >>> f = open('c:/python21/exam/python.txt') # 파일을 열고 >>> f.read() # 읽어랑~ 'Programming is fun.\nVery fun!\n\nYou have to do it yourself...' >>> print buffer Programming is fun. Very fun! <Write> Close 해야함 >>> f = open('c:\python21\exam\letter.txt', 'w') # 새 파일을 열고 >>> f.write('Dear Father,') # 아버님 전상서 >>> f.close() # 닫아준다 <Append> >>> f = open('c:\python21\exam\letter.txt', 'a+') <한줄씩> >>> f = open('c:/python21/readme.txt') >>> f.readline() # 한 줄 읽어~ 'This is Python version 2.1\n' >>> f.readline() # 한 줄 더 읽어~ '==========================\n' >>> f = open('c:/python21/readme.txt') <반복문 이용 컴마(,) 를 사용한것은 개행문자 중복때문> >>> for x in range(5): ... line = f.readline() ... print line, ... This is Python version 2.1.1 ============================ <여러줄 한꺼번에> >>> f=open('d:/python21/readme.txt') >>> lines = f.readlines() >>> import sys >>> sys.stdout.writelines(lines[:5]) 리스트에서 끝 원소의 인덱스는 -1 <pickle> 어떤 자료형이든 저장 >>> users = {'kim':'3kid9', 'sun80':'393948', 'ljm':'py90390'} >>> f = open('d:/python21/exam/users.txt', 'w') >>> import pickle >>> pickle.dump(users, f) >>> f.close() >>> f = open('d:/python21/exam/users.txt') >>> a = pickle.load(f) >>> print a {'sun80': '393948', 'kim': '3kid9', 'ljm': 'py90390'} <glob> 파일 목록 기능 >>> import glob >>> glob.glob('*.*') ['INSTALL.LOG', 'LICENSE.txt', 'NEWS.txt', 'py.ico', 'pyc.ico', 'pycon.ico', 'py thon.exe', 'pythonw.exe', 'readme.txt', 'UNWISE.EXE', 'w9xpopen.exe'] >>> glob.glob('*.txt') ['LICENSE.txt', 'NEWS.txt', 'readme.txt'] <os.path 예제> >>> import os.path >>> files = glob.glob('*') >>> for x in files: ... print x, ... if os.path.isdir(x): # 디렉토리인가? ... print '<DIR>' ... else: ... print '' Dreamy의 코드 스크랩내가 모으고 내가 보는
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5