노력과 삽질 퇴적물

파이썬: 기초정리 (2) 본문

프로그래밍note/언어. 스크립트 계열

파이썬: 기초정리 (2)

MTG 2013. 5. 8. 10:41


파이썬: 기초정리 (1)

파이썬: 기초정리 (2)

파이썬: 기초정리 (3)

파이썬: 기초정리 (4)


* 해당 포스트의 예시들은 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(접붙이할_리스트명)

등등 유용한 기본함수가 있다.

-> 점프 투 파이썬, 리스트 (List)


리스트 수정/변경 (연산)

 합치기

>>> 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문

for i in 변수[각주:1]:

... ... ...


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 = open('C:\Python2\LICENSE.txt')     #경로값

>>> 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 = open('C:\new.txt', 'w')  #Traceback (most... 에러일땐  pen = open('C:\\new.txt', 'r')

>>> 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. 객체지향 & (객체관련) 특수함수


클래스, 형태와 용법예시

 * 보충자료

-> 1) 클래스 - 점프 투 파이썬

-> 오늘, 행복하자! :: [Python] 파이썬 기본내용 정리(6) - 클래스

클래스 정의

&

객체생성

(인스턴스 생성)

>>> 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





기타. 참고자료


점프 투 파이썬 PDF판

위키독스, 왕초보를 위한 Python 2.7






기타. 변경이력


일자

변경이력

2013-05-08

 초안 작성

2013-12-11

 '기본 입출력, 형태와 용법예시' 추가

2013-12-12

 명령어 pass, self 보충설명 추가

2014-10-23

 0. 파이썬 주요사항. 장점에서 파이썬 접착 예제 링크 추가

  1. 리스트도 가능 [본문으로]

'프로그래밍note > 언어. 스크립트 계열' 카테고리의 다른 글

파이썬: 기초정리 (4)  (0) 2013.05.26
파이썬: 기초정리 (3)  (0) 2013.05.18
파이썬: 기초정리 (1)  (2) 2013.05.07
HTML: html태그 기초  (0) 2012.08.01
JS: 자바스크립트 관련 링크모음  (0) 2011.08.11