노력과 삽질 퇴적물
파이썬: 기초정리 (2) 본문
* 해당 포스트의 예시들은 Python (command line)으로 실행했습니다.
0. 파이썬 주요사항
장점 |
단점 |
- 윈도우/리눅스등의 시스템 명령어를 이용한 유틸리티 개발에 유리 - 간편한 GUI프로그래밍(Tkinter, wxPython, PyQT, PyGTK) - 접착언어(Glue Language)로써 C로 만든 프로그램을 파이썬에 쓰거나 그 반대로도 가능. [#Extending Python with C or C++ — Python 2.7.8 documentation] - CGI프로그래밍 지원 - Numeric Python모듈 지원으로 수치연산 가능 - 데이터 베이스에 접근가능 및 관련 도구/함수 제공(pickle등등.) |
- 작업량이 많은 연산에는 부적합(Numeric Python모듈은 사실 C로 작성) - 데이터 압축 알고리즘등의 개발 프로그램에 부적합 |
1. 자료형, 숫자형과 문자열 그리고 출력서식
숫자형 |
||
정수 |
-K, ..., 0. ..., K [단, |K| = K] | >>> position_x = 100 >>> print "X: %d" %(position_x) X: 100 |
소수점 |
-K.xxx, ..., 0. ..., K.xxx [단, |K| = K이고 0< |0.xxx| < 1] K.xxxeN(혹은 K.xxxEN)은 (K.xxx)^N | >>> position_9 = 1013.05 >>> print "Y: %f" %(position_y) Y: 1013.050000 |
8진수 |
변수 선언시 숫자앞에 0만 붙인다. (활용도가 떨어지는 자료형이라고 함.) | >>> val1 = 100 >>> val2 = 0100 #8진수로 변수선언 >>> print "val1: %d, %o | val2: %d, %o" %(val1, val1, val2, val2) val1: 100, 144 | val2: 64, 100 |
16진수 |
변수 선언시 숫자앞에 0x를 붙인다. (활용도가 떨어지는 자료형이라고 함.) | >>> val1 = 100 >>> val2 = 0x100 #16진수로 변수선언 >>> print "val1: %d, %o | val2: %d, %o" %(val1, val1, val2, val2) val1: 100, 64 | val2: 256, 100 |
복소수 |
고등학교 수학에서 i로 표기하던게 j로 | >>> val = 1 + 2j >>> print val (1+2j) |
문자열 | ||
'... ... ...' | 단일 인용부호 -> 문자열내 ["]포함 가능 | >>> print '노력과 삽질 퇴적물' 노력과 삽질 퇴적물 >>> print 'MTG 왈. "내 블로그 이름은 노력과 삽질"' MTG 왈. "내 블로그 이름은 노력과 삽질" >>> print '노력과 삽질\' 퇴적물' 노력과 삽질' 퇴적물 >>> print '노력과 삽질\" 퇴적물' 노력과 삽질" 퇴적물 |
"... ... ..." | 이중 인용부호 | >>> print "노력과 삽질 퇴적물" 노력과 삽질 퇴적물 >>> print "'노력'과 '삽질' 퇴적물" '노력'과 '삽질' 퇴적물 >>> print "노력과 삽질\' 퇴적물" 노력과 삽질' 퇴적물 >>> print "노력과 삽질\" 퇴적물" 노력과 삽질" 퇴적물 |
'''... ... ...''' | 단일 인용부호를 3중으로 사용 -> 장문 문자열 -> 문자열내 ["]포함가능 | >>> print ''' 안녕하세요? 노력과 삽질 퇴적물 이라는 블로그 관리자입니다. ''' 안녕하세요? 노력과 삽질 퇴적물 이라는 블로그 관리자입니다. >>> print '''안녕하세요? 노력과 삽질 퇴적물 이라는 블로그 관리자입니다.''' 안녕하세요? 노력과 삽질 퇴적물 이라는 블로그 관리자입니다. |
"""... ... ...""" | 이중 인용부호를 3중으로 사용 -> 장문 문자열 -> 문자열내 [']포함가능 | >>> (생략) |
기타 |
|
출력문 정렬 |
예시. %10s //문자열 10칸에서 우측정렬 %-10s //문자열 10칸에서 좌측정렬 %0.4f //소수점 4자리까지 |
문자열 조합 | 예시. >>> abc = '가나다라마바사_' >>> def = '아자차카' >>> print abc, def 가나다라마바사_ 아자차카 >>> print abc,def 가나다라마바사_ 아자차카 #[,]와 변수사이 공백과 무관 >>> print "-+-" * 10 -+--+--+--+--+--+--+--+--+--+- |
제곱연산자 |
제곱은 '^'대신 '**'로 표기 됩니다. 예. 8 == 2 ^ 3 (C/C++ 및 JAVA등등) == 2 ** 3 (파이썬 스타일) |
축약연산자 | 파이썬에서도 축약연산자가 가능합니다. |
2. 자료형, 리스트
예시. 리스트 |
|
>>> usr_list = ['2013', '05', '09', '12', '00'] >>> usr_list ['2013', '05', '09', '12', '00'] >>> usr_list[:3] #처음부터 3번째까지(인덱스 0부터 2까지) 출력 ['2013', '05', '09'] >>> usr_list[3:] #앞부분 3개만 뺴고 출력. ['12', '00'] >>> usr_list[1:4] #인덱스 번호 1부터 (4-1)까지 출력 ['05', '09', '12'] >>> len(usr_list) # 리스트 길이 구하는 함수 5 >>> usr_list.append('222') #리스트 원소 추가 ['2013', '05', '09', '12', '00', '222'] >>> usr_list.remove('05') >>> print usr_list ['2013', '09', '12', '00', '222'] >>> list2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #행렬스타일 리스트 >>> list2 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
-> 다른 고급 프로그래밍 언어에 나오는 행렬과 유사. 다만 인덱스값에 마이너스가 음수여도 1회 순환정도 길이이내의 값을 넣으면 에러없이 사용가능. (부분적으로만 원형 리스트???) 참고로 리스트 맨 마지막 원소의 인덱스는 -1이라고 합니다.
-> 그외.
리스트명.sort()
리스트명.reverse()
리스트명.index(인덱스값)
리스트명.insert(인덱스값, 새로넣을값)
리스트명.extend(접붙이할_리스트명)
등등 유용한 기본함수가 있다.
리스트 수정/변경 (연산) |
|||
합치기 |
>>> a = ['a', 'b', 'c'] >>> b = [1, 2, 3] >>> a + b ['a', 'b', 'c', 1, 2, 3] |
반복 |
>>> a = ['a', 'b', 'c'] >>> a * 3 ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'] |
수정 -> 특정 인덱스 -> 특정 구간 대상 |
>>> a = ['a', 'b', 'c', 'd', 'e'] >>> a[3] 'd' >>> a[3] = 7 #인덱스는 0부터 ['a', 'b', 'c', 7, 'e'] >>> b = [1, 2, 3, 4, 5, 6] >>> b[2:4] = [11, 22, 33, 44, 55] >>> b [1, 2, 11, 22, 33, 44, 55, 5] |
삭제 |
>>> a = ['a', 'b', 'c', 'd', 'e'] >>> del a[1] >>> a ['a', 'c', 'd', 'e'] |
-> 만약 특정 인덱스를 새로운 문자열과 병합시키려면 아래와 같다.
예.
>>> str(usr_lisr[2]) + "가나다라"
>>> 'usr_list[2]' + "가나다라"
3. 터플(혹은 튜블? tuple)
* 특징
-> 리스트와 달리 원소값을 직접 바꿀수 없고, 오려붙이기 하듯이 수정해야 한다.
-> 자료형이라기보단 파이썬 고유 문법? 변수 1개에 값이 다수가 동시에 가능한거? 가령 교환 알고리즘등에서 a, b, tmp라는 변수를 해서 tmp를 중재자로 두고 하는데, 파이썬은 그냥 된다
(다른언어) int a = 200; int b = 300; int tmp = 0; tmp = a; a = b; b = tmp; | (파이썬) c = 1000 d = 2000 c, d = d, c |
-> a, b = b, a... 그리고 함수 인자에서 def abc(x, y, *rest)로 하면 초과입력되는 매개인자가 그냥 (...)로 묶어서 처리
형태와 용법예시 | |
선언 | >>> usr_t1 = () #공백 터플 >>> print usr_t1 () >>> usr_t2= 2, >>> print usr_t2 (2,) >>> usr_t3= 4, 5, 6, ... >>> print usr_t3 (4, 5, 6, ...) >>> usr_t4 = (6, 7, 8, 9, ...) >>> print usr_t4 (6, 7, 8, 9, ...) |
터플<->리스트 | >>> usr_tuple = (1, 2, 3) #터플을 리스트로 변환하는 예시 >>> usr_list = list(usr_tuple) >>> usr_list [1, 2, 3] >>> usr_list = [4, 5, 6] #터플을 리스트로 변환하는 예시 >>> usr_tuple = tuple(usr_list) >>> usr_tuple (4, 5, 6) |
인덱싱 | >>> t1 = (2, 1, 3, 'a', 'b', 'c') >>> t1[3] 'a' >>> t1[0] 2 |
슬라이싱 | >>> t2 = (2, 1, 3, 'a', 'b', 'c') >>> t2[2:] (3, 'a', 'b', 'c') >>> t2[:2] (2, 1) |
더하기 | >>> t3= 1, 2, 3 >>> t4 = 6, 7, 8 >>> t3 + t4 (1, 2, 3, 6, 7, 8) |
반복 | >>> t5 = 3, 8, 6 >>> t5 * 3 (3, 8, 6, 3, 8, 6, 3, 8, 6) |
값 수정 | ??? |
4. 사전
형태와 용법예시 | |
선언 & 호출 | >>> usr_dic = {} #빈 딕셔너리 >>> usr_dic {} >>> usr_dic['abc'] = 'QWERTYU' >>> usr_dic['ABC'] = 'zxcvbnm' >>> usr_dic['abc'] 'QWERTYU' >>> usr_dic['ABC'] 'zxcvbnm' >>> usr_dic {'QWERTYU', 'zxcvbnm'} >>> mini_dic = {'word1':'word1 is something', 'world2':'it is not word1'} #한번에 선언하는 방법 |
삭제 | >>> del usr_dic['qwert'] #딕셔너리 특정 원소 삭제 |
딕셔너리 <-> 리스트 | >>> usr_dic = {'hair':'black', 'eyes':'brown', 'blood':'A'} >>> usr_dic.keys() ['hair', 'eyes', 'blood'] >>> usr_dic.values() ['black', 'brown', 'A'] |
검색 | >>> usr_dic = {'hair':'black', 'eyes':'brown', 'blood':'A'} >>> 'eyes' in usr_dic True #반환형이 Boolean |
기타사항 | -> 리스트가 [], 터플이 (), 딕셔너리가 {} -> 행렬과 비슷한게 행렬은 인덱스번호였다면, 딕셔너리는 문장에 대한 단축키워드로 저장/관리 -> 단, 값을 넣은 순서대로 저장되지는 않는다. -> 어떻게 보면 리눅스 터미널 환경에도 있던 alis랑 비슷? |
5. 순환문
*C/C++, JAVA등등과 약간 다르거나 상이합니다.
* 파이썬에는 switch-case문이 없습니다.
파이썬 스타일 |
C/C++등등 |
|
IF문 |
if a < 100: ... ... ... pass #해당 조건문에 별다른 작업을 안하게 elif a == 120: ... ... ... else: ... ... ... |
if (30 < 100) { ... ... ... }else{ ... ... ... } |
FOR문 | ... ... ... OR for i in range(a, z): ... ... ... | for(int i = 0; i < 100; i++) { ... ... ... } |
* 자바에서는 스레드등에서 try-catch문으로 예외처리를 했는데, 파이썬은 try-except입니다.
함수내 조건문이 처리가능한 범위를 넘거나 입력된 자료유형이 다를경우 예외처리로 넘기게 하는겁니다.
try-exception | ||
>>> def usr_f(a, b) ... try: ... if a: ... ... ... ... ... elif b: ... ... ... ... ... else: ... ... ... ... ... except ValueError: ... pass #해당 조건문에 별다른 작업을 안하게 ... except ZeroDivisionError: ... pass #해당 조건문에 별다른 작업을 안하게 ... finally: ... #에러가 발생해도 마무리로 할 동작 |
* pass란?
-> 조건문/순환문/함수/클래스에서 사용이 가능하며, 명령어상 아무것도 안 하고 빠져나온다. 가령, break나 continue처럼 해당 명령어 이후로 처리가 안 되는것 처럼.
if-elfi문에는 조건문이 아닌 조건문 내용과 같은 깊이의 들여쓰기이다.
-> C/JAVA와 달리 {...}가 없는 형태라 함수/클래스 블록을 닫는 위치를 명시하는 용도로도 가능하다고 한다.
6. 클래스와 모듈 그리고 라이브러리
형태와 용법예시 | |
클래스 | >>> class UsrObect: ... member1 = 'python style' (중략) >>> usr_object = UsrObect() #자바&C++식으로 하면 UsrObect usr_object = new UsrObect() >>> usr_object.member1 #인스턴스(혹은 객체) 생성시킨 클래스의 멤버를 사용하는 예시 |
함수 | >>> def usr_fun(): ... //함수를 정의1 ... //함수를 정의2 ... return x //있거나 없거나 ... >>> |
모듈 참조. -> 뭉치 가져오기 -> 여러가지 뭉치 | >>> from Tkinter import* #모듈연결 방법1. 모듈내 특정 변수&함수를 딱 집어오기 >>> widget = Label() #참고로 모듈명.변수등으로 사용 가능. >>> import random #자바에서 패키지 임폴트??? C/C++로 치면 #include <헤더파일.h> >>> random.random() 0.7193047134035037 |
//만약, 함수내 변수중 global v
v = 10 으로 해두면 전역변수
lambda(람다)란?
무명함수같은거라, def를 이용한 함수정의를 최소한의 입력으로 구현가능.
>>> usr_cal(lambda x, y: 연산등등)
>>> usr_cal(2013, 05)
7. 파일 입출력
기본 입출력, 형태와 용법예시 | |||||
print("파이썬 기본 입출력 예제")
in_num1 = input("숫자만 입력하세요[float]: ") in_num1 = float(in_num1) print ("입력이 됐습니다.") in_num2 = input("숫자만 입력하세요[int]: ") in_num2 = int(in_num2) print ("입력이 됐습니다.") in_str = raw_input("문자열만 입력하세요[str]: ") in_str = str(in_str) print ("입력이 됐습니다.") print("in_num1 = ", in_num1, ",in_num2 = ", in_num2, ", in_str = ", in_str); |
파일 출력, 형태와 용법예시 | ||
read() | >>> import os >>> file.read() #원본파일에 있는 1줄띄기등이 무시된채 출력됩니다. | |
버퍼 사용 | >>> import os #이미 했으면 생략가능. >>> file2 = open('C:\Python2\LICENSE.txt') >>> usr_buffer = file2.read() >>> print usr_buffer #pritn명령없이 그냥 변수만 치면 \n가 무시된채 출력 | |
readline() | >>> import os #이미 했으면 생략가능. >>> file3 = open('C:\Python2\NEWS.txt') >>> file3.readline() #파일내 첫번째줄만 출력 Python News >>> file3.close() >>> file4 = open('C:\Python2\NEWS.txt') >>> looong = file4.readline() >>> for n in range(5): >>> ... looong = file4.readline() >>> ... print looong, Python News +++++++++++ What's New in Python 2.7.4? =========================== >>> file5 = open('C:\Python2\NEWS.txt') >>> looong2 = file5.readlines() >>> import sys >>> sys.stdout.writelines(looong2[:5]) #sys.stdout.writelines(looong2)이면 전체출력 Python News +++++++++++ What's New in Python 2.7.4? =========================== |
파일 입력, 형태와 용법예시 | ||
open('경로', 'w') | >>> import os #이미 했으면 생략가능. >>> pen.close() #생성된 파일 확인 가능 | |
open('경로', 'a') | >>> import os #이미 했으면 생략가능. >>> pen = open('C:\new.txt', 'a') >>> pen.write('HELLO\nwolrd!') >>> pen.close() #파일을 닫아야만 새로 추가한 값이 있다. | |
open('경로', 'r') | # open함수 옵션에 r을 쓰면 READ ONLY |
피클(pickle), 형태와 용법예시 | ||
(나중에) |
8. 객체지향 & (객체관련) 특수함수
클래스, 형태와 용법예시 * 보충자료 | |||
클래스 정의 & 객체생성 (인스턴스 생성) | >>> class UsrClass: ... def work(): ... return 'PYTHON STYLE!!!' ... >>> obj = UsrClass() #자바&C++식으로 하면 UsrObect usr_object = new UsrObect() >>> obj.work() PYTHON STYLE!!! | ||
상속 | >>> class Parent: ... def work(): ... return 'PYTHON STYLE!!!' ... >>> class Child(Parent): #상속처리 | ||
내부 객체 (혹은 객체 속 객체) |
특수함수, 형태와 용법예시 | |||
__init__() 생성자 비슷? | |||
__del__() 소멸자 | |||
__repr__() | |||
__add__() | |||
__cmp__() |
* self란?
-> JAVA의 this처럼 특정함수, 클래스내 변수를 지정해서 사용하는 예약어(혹은 키워드)같다.
-> 클래스내 함수의 첫번째 인자는 무조건 self로
-> python self 설명 | grayfugitive
기타. 참고자료
기타. 변경이력
일자 |
변경이력 |
2013-05-08 | 초안 작성 |
2013-12-11 | '기본 입출력, 형태와 용법예시' 추가 |
2013-12-12 | 명령어 pass, self 보충설명 추가 |
2014-10-23 | 0. 파이썬 주요사항. 장점에서 파이썬 접착 예제 링크 추가 |
- 리스트도 가능 [본문으로]
'📂기초 및 세팅 note > 언어. 스크립트 계열' 카테고리의 다른 글
파이썬: 기초정리 (4) (0) | 2013.05.26 |
---|---|
파이썬: 기초정리 (3) (0) | 2013.05.18 |
파이썬: 기초정리 (1) (2) | 2013.05.07 |
JSP: JSP 기초(2) (0) | 2012.09.13 |
JSP: 표현언어(el) (0) | 2012.09.05 |