1. P ytho n3
B rie f S u m m ary
S K p la ne t
신호철
2. 파이썬이란 …
• 1 991 년 귀도 반 로썸 (G u id o van Ro s s u m ) 이 발표 .
• 사용자 층이 점점 넓어지는 중 .
• 아직 개발에서 많이 사용되지는 않지만 ,
웹업계보다 비교적 척박한 임베디드업계에서도
노키아 (N o kia) 등에서 지원하고 있습니다 .
3. 파이썬의 특징
가독성
- 간결하고 가독성이 좋습니다 .
- 코드블럭을 들여쓰기 (in d e n tatio n ) 로 구분 .
풍부한 라이브러리
접착성
무료
유니코드
동적타이핑
4. 파이썬의 특징
가독성
풍부한 라이브러리
- 매우 광범위한 라이브러리가 기본으로 포함되어 있음 .
- 외부 라이브러리가 풍부하며 확장이 쉬움 .
접착성
무료
유니코드
동적타이핑
5. 파이썬의 특징
가독성
풍부한 라이브러리
접착성
- 쉽게 라이브러리를 추가할 수가 있습니다 .
- 파이썬에서 C 로 구현된 부분을 사용할 수도 있으며 ,
C 에서 파이썬을 사용할 수도 있습니다 .
무료
유니코드
동적타이핑
6. 파이썬의 특징
가독성
풍부한 라이브러리
접착성
무료
- 파이썬은 파이썬 소프트웨어 재단 (Pyth o n S o ftware F o u n d atio n ) 에서 관리하고 있음 .
- 무료와 다름없는 Pyth o n S o ftware F o u n d atio n Lic e n s e .
유니코드
동적타이핑
7. 파이썬의 특징
가독성
풍부한 라이브러리
접착성
무료
유니코드
- 파이썬에서의 문자열들은 모두 유니코드입니다 .
- 우리가 한글 , 한자 등을 표현하려고 특별한 노력을 할 필요가 없습니다 .
동적타이핑
8. 파이썬의 특징
가독성
풍부한 라이브러리
접착성
무료
유니코드
동적타이핑
- 런타임 시에 타입 체크를 하는 동적타이핑을 지원하며 ,
- 메모리 관리 자동으로 합니다 .
9. 파이썬의 종류
C p yth o n
Jyth o n
Iro n Pyth o n
PyPy
10. 파이썬이 쓰이는 프로젝트들
• 알게 모르게 파이썬이 사용되는 프로젝트들이 많
습니다 .
• B itTo rre n t, Mo in Mo in , S c o n s , Trac , Yu m
• C h e rryPy, D j g o
an
• G IMP, Maya, Pain t S h o p Pro
• Yo u tu b e .c o m , G o o g le G ro u p s , G o o g le
Map s , G m ail
11. 2. x 와 3. x 의 차이
p rin t 가 함수로 변경 .
- 2.x s tyle :
> > > p rin t "we lc o m e to ", "p yth o n 3k“
we lc o m e to p yth o n 3k
- 3.0 s tyle :
> > > p rin t("we lc o m e to ", "p yth o n 3k")
we lc o m e to p yth o n 3k
lo n g 자료형이 없어지고 in t 로 통일 .
‘in t / in t’ 의 결과가 flo at 으로 처리 .
S trin g , U n ic o d e 체계 변경 .
12. 2. x 와 3. x 의 차이
p rin t 가 함수로 변경 .
lo n g 자료형이 없어지고 in t 로 통일 .
- 2.x s tyle :
> > > typ e (2* * 31 )
< typ e 'lo n g '>
> > > s ys .m axin t
21 47483647
- 3.0 s tyle :
> > > typ e (2* * 31 )
< c las s 'in t'>
> > > typ e (2* * 40)
< c las s 'in t'>
‘in t / in t’ 의 결과가 flo at 으로 처리 .
S trin g , U n ic o d e 체계 변경 .
13. 2. x 와 3. x 의 차이
p rin t 가 함수로 변경 .
lo n g 자료형이 없어지고 in t 로 통일 .
‘in t / in t’ 의 결과가 flo at 으로 처리 .
- 2.x s tyle :
> > > 3/2
1
- 3.0 s tyle :
> > > 3/2
1 .5
> > > typ e (2/2)
< c las s 'flo at'>
S trin g , U n ic o d e 체계 변경 .
14. 2. x 와 3. x 의 차이
p rin t 가 함수로 변경 .
lo n g 자료형이 없어지고 in t 로 통일 .
‘in t / in t’ 의 결과가 flo at 으로 처리 .
S trin g , U n ic o d e 체계 변경 .
- 2.x s tyle :
> > > typ e (' 가 ')
< typ e 's tr'>
> > > typ e (u ' 가 ')
< typ e 'u n ic o d e '>
- 3.0 s tyle :
> > > typ e (' 가 ')
< c las s 's tr'>
> > > typ e (' 가 '.e n c o d e ('c p 949'))
< c las s 'b yte s '>
15. He llo Wo rld
• > > > p rin t("h e llo wo rld ")
h e llo wo rld
16. 들여쓰기
들여쓰기 (in d e n tatio n ) 는 파이썬 문법의 가장 큰 특징입니다 .
- 가독성을 높이지만 , 오류가 일어나지 않도록 조심해야 합니다 .
- 코드블럭 1
[ TAB ] 코드블럭 2
코드블럭 3
[ TAB ] 코드블럭 4
17. 소스코드 인코딩
파이썬에서는 # 이후는 주석으로 인식합니다 .
그러나 다음과 같이 ,
소스코드 부분에서 사용될 경우 ,
소스코드 인코딩을 지정하는 용도로 사용됩니다 .
- # c o d in g : latin - 1
- # - * - c o d in g : u tf- 8 - * -
18. 기타 파이썬 문법
• 한 라인에 여러 구문이 올 경우에는 세미콜론 (;)
을 사용해야 합니다 .
• >>> a= 1; b = 2
• 들여쓰기 (in d e n tatio n ) 이 중요하지만 , 문장이 아
직 안 끝난 경우에는 들여쓰기를 안 해도 문법오
류가 나지 않습니다 .
• > > > a = (1 +
[ TAB ] 2 +
3+
[ TAB ] [ S ] [ S ] 4)
>>> a
10
19. 2. X 를 3 으로 변경하기
파이썬 2.x 과 파이썬 3 과는 호환이 되지 않는 다는 것은 큰 단점입니
다만 , 2.x 에서 3 로 변경하는 툴을 제공합니다 .
- C : Pyth o n 30 To o ls S c rip ts > 2to 3.p y - w te s t.p y
21. 변수명
• 문자 , 숫자 , 밑줄 (_) 로 구성됩니다 .
숫자는 처음에 나올 수 없습니다 .
• 대소문자를 구분합니다 .
• 예약어 사용 불가 .
e x.
>>> frie n d = 1 0
>>> Frie n d = 1
>>> frie n d
10
>>> Frie n d
1
22. 수치
in t
- > > > 1 0, 0x1 0, 0o 1 0, 0b 1 0
(1 0, 1 6, 8, 2)
flo at
- > > > typ e (3.1 4), typ e (31 4e - 2)
(< c las s 'flo at'> , < c las s 'flo at'> )
c o m p le x
- > > > x= 3- 4j
> > > typ e (x), x.im ag , x.re al, x.c o n j g ate ()
u
(< c las s 'c o m p le x'> , - 4.0, 3.0, (3+ 4j))
연산자
- + , - , * , /, //, % , * * , =
23. 문자
‘s trin g ’, “s trin g ”,
“”” 줄바꿈도
그대로 적용됩니다”””
E s c ap e 문자
Escape 문자 사용예 의미
n 개행 ( 줄바꿈 )
t 탭
r 캐리지 리턴
0 널 (N u ll)
문자 ‘ ’
’ 단일 인용부호 (‘)
” 이중 인용부호 (“)
24. 문자
+ , * 연산자
- > > > ‘p y’ ‘th o n ’
‘p yth o n ’
- > > > ‘p y’ * 3
‘p yp yp y’
인덱싱 & 슬라이싱
- > > > ‘p yth o n ’[ 0]
‘p ’
> > > ‘p yth o n ’[ 5] p y t h o n
‘n ’
> > > ‘p yth o n ’[ 1 :4] 0 1 2 3 4 5 6
‘yth ’ -6 -5 -4 -3 -2 -1
> > > ‘p yth o n ’[ - 2:]
‘o n ’
25. 유니코드
모든 문자열 (s trin g ) 이 기본적으로 유니코드입니다 .
유니코드 이외의 인코딩이 있는 문자열은 b yte s 로 표현됩니다 .
- >>> type(' 가 ')
<class 'str'>
>>> ' 가 '.encode('utf-8')
b'xeaxb0x80'
>>> type(' 가 '.encode('utf-8'))
<class 'bytes'>
26. 리스트
리스트는 쉽게 값들의 나열이라고 생각하시면 됩니다 .
또한 , 인덱싱과 슬라이싱도 가능합니다 .
- >>> colors = ['red', 'green', 'gold']
>>> colors
['red', 'green', 'gold']
ap p e n d , in s e rt, e xte n d , + 연산자를 이용해 값 ( 들 ) 을 추가할 수 있
습니다 .
>>> colors.append('blue')
>>> colors
['red', 'green', 'gold', 'blue']
>>> colors.extend(['white', 'gray'])
>>> colors.insert(1, 'black') >>> colors
>>> colors ['red', 'black', 'green', 'gold', 'blue',
['red', 'black', 'green', 'gold', 'blue'] 'white', 'gray']
27. 리스트
In d e x 를 이용해 어디에 원하는 값이 있는지 확인 가능합니다 .
- >>> colors.index('red')
0
C o u n t 를 이용해 원하는 값의 개수를 알 수 있으며 ,
p o p 을 이용해 값을 뽑아낼 수도 있습니다 .
- >>> colors
['red', 'black', 'green', 'gold', 'blue', 'white', 'gray', 'red']
>>> colors.count('red')
2
>>> colors.pop()
'red‘
>>> colors
['red', 'black', 'green', 'gold', 'blue', 'white', 'gray']
Re m o ve 로 값을 삭제하거나 , s o rt 로 정렬을 할 수도 있습니다 .
28. 튜플
튜플 (tu p le ) 은 리스트와 유사하나 , 읽기전용입니다 .
읽기 전용인 만큼 제공되는 함수도 리스트에 비해 적지만 , 속도는 그만큼 빠릅
니다 .
튜플에서 제공되는 메소드는 c o u n t, in d e x 정도입니다 .
튜플을 이용하면 ‘ C ’ 와 같은 언어에서는 변수가 하나 더 필요한 s wap 예제를
다음과 같이 간단하게 해결할 수도 있습니다 .
- >>> a, b = 1, 2
>>> print(a, b)
12
>>> a, b = b, a
>>> print(a, b)
21
29. 딕셔너리
딕셔너리는 키와 값의 쌍으로 이루어져 있으며 , 다음과 같이 정의할 수 있습니
다.
- >>> d = dict(a=1, b=3, c=5)
>>> d
{'a': 1, 'c': 5, 'b': 3}
새로운 값의 추가나 변경은 , 다음과 같이 간단하게 새로운 키와 값을 할당하면
됩니다 .
- >>> color
{'apple': 'red', 'banana': 'yellow'}
>>> color["cherry"] = "red"
>>> color
{'cherry': 'red', 'apple': 'red', 'banana': 'yellow'}
>>> color["apple"] = "green"
>>> color
{'cherry': 'red', 'apple': 'green', 'banana': 'yellow'}
30. 딕셔너리
딕셔너리의 내용을 얻기 위해서는 다음과 같이 ite m s (), ke ys (), valu e s () 메소드를
사용하면 됩니다 . ite m s () 는 딕셔너리의 모든 키와 값을 튜플로 묶어서 반환하며 ,
ke ys () 는 키만을 , valu e s () 는 값만을 반환합니다 .
- >>> for k, v in color.items():
[TAB]print(k, v)
cherry red
apple green
banana yellow
삭제는 d e l 을 이용할 수도 있으며 c le ar 를 이용해 한번에 삭제할 수도 있습니다 .
- >>> color
{'cherry': 'red', 'apple': 'green', 'banana': 'yellow'}
>>> del color['cherry']
>>> color
{'apple': 'green', 'banana': 'yellow'}
>>> color.clear()
>>> color
{}
32. 함수의 정의
함수의 선언은 d e f 로 시작하고 콜론 (:) 으로 끝낸다
.
함수의 시작과 끝은 코드의 들여쓰기로 구분
시작과 끝을 명시해 줄 필요가 없다 .
헤더 (h e ad e r) 파일 , 인터페이스 (in te rfac e )/ 구현
(im p le m e n tatio n ) 같은 부분으로 나누지 않음
33. 함수 선언
함수 선언 문법
간단한 함수 선언해 보기
- 입력 받은 Times(a, b): 서로 곱한 값을 리턴한다 .
def 2 개의 인수를
return a*b
>>> Times(10, 10)
100
34. 스코핑 룰 (Scoping rule)
• 이름공간 (N am e S p ac e )
• 변수의 이름이 저장되어 있는 장소
• 함수 내부의 이름공간 , 지역 영역 (Lo c al s c o p e )
• 함수 밖의 영역 , 전역 영역 (G lo b al s c o p e )
• 파이썬 자체에서 정의한 내용에 대한 영역 , 내장 영역
(B u ilt- in S c o p e )
• LG B 규칙
• 변수 이름을 찾을 때 Lo c al S c o p e - > G lo b al S c o p e - >
B u ilt- in S c o p e 순서로 찾는다 .
• 지역 영역에서 전역 영역의 이름을 접근할 때 g lo b al 을 이용
35. 파이썬에서 인수 모드 - 1
• 기본 인수 값
• 함수를 호출 할 때 인수를 지정해 주지 않아도 기본 값이
할당되도록 하는 방법 .
• 키워드 인수
• 인수 이름으로 값을 전달하는 방식
• 변수의 이름으로 특정 인수를 전달할 수 있다 .
36. 파이썬에서 인수 모드 - 2
• 가변인수 리스트
• 인수의 개수가 정해지지 않은 가변 인수를 전달
• * 를 사용하며 인수는 튜플 형식으로 전달 됨 .
• 정의되지 않은 인수 처리하기 .
• * * 를 사용하면 정의되지 않은 인수를 사전형식으로 전달
37. 람다 (lambda) 함수
• 이름이 없는 1 줄 짜리 함수
• 한 줄의 간단한 함수가 필요한 경우
• 프로그램의 가독성을 위해서
• 함수를 인수로 넘겨 줄 때
38. pass 구문 (statement)
• 아무 일도 하지 않습니다 .
• 아무것도 하지 않는 함수 , 모듈 , 클래스를 만들
어야 할 경우가 있는데 . 이 때 p as s 가 사용될 수
있다 .
>>> def sample():
pass
>>> sample()
>>>
>>>
39. __doc__ 속성과 help 함수
• h e lp 함수를 이용해 함수의 설명을 볼 수 있다 .
>>> help(print)
• 사용자가 만든 함수도 h e lp 를 사용해 설명을 볼
수 있다 .
• 조금 더 자세한 설명을 추가 하려면 __d o c __ 속성
을 이용한다 .
41. if 문
if < 조건식 > :
< 구문 >
조건식을 평가하고 참인 경우만 구문이 수행
2 개 이상의 구문은 들여쓰기로 블록을 지정
- 함수와 동일
- 들여쓰기의 정도는 파일 전체를 통틀어 일치해야 함
42. e lif, e ls e
if < 조건식 1> :
< 구문 1>
elif < 조건식 2> :
< 구문 2>
else:
< 구문 3>
e lif
- 2 개 이상의 조건을 처리하는 경우
- if 는 가장 처음에만 사용할 수 있는 반면에 ,
e lif 는 필요한 만큼 사용 가능
e ls e
- 어떠한 조건에도 해당하지 않는 경우
- 가장 마지막에만 사용 가능
43. while 문
while < 조건식 > :
< 구문 >
조건식이 참 (Tru e ) 인 동안 내부 구문을 반복 수행
- 조건식은 구문이 수행되기 이전에 우선 평가
- 구문을 모두 수행 이후 다시 조건식을 재평가
- 조건식이 거짓 (Fals e ) 이면 wh ile 문 구조를 벗어남
44. fo r 문
for < 아이템 I> in < 시퀀스형 객체 S> :
< 구문 >
시퀀스형 객체를 순차적으로 순회
- ‘ 시퀀스형 객체 S ’ 의 각 아이템을 ‘ 아이템 I’ 에 할당
- 할당된 아이템 I 를 가지고 구문을 수행
- 모든 아이템을 순회하거나 b re ak 을 만나면 fo r 문이 종료
52. 클래스와 인스턴스 관계
is in s tan c e ( 인스턴스 객체 , 클래스 객체 )
- 인스턴스 객체가 어떤 클래스로부터 생성되었는지 확인
- 불린 형태로 결과 반환
- 예제 코드
53. 생성자와 소멸자
생성자
- 생성시 초기화 작업을 수행
- 인스턴스 객체가 생성될 때 자동으로 호출
- __in it__()
소멸자
- 소멸시 종료 작업을 수행
- 인스턴스 객체의 참조 카운터가 '0' 이 될 때 호출
- __d e l__()
예제 코드
54. 메서드 확장
정적 (s tatic ) 메서드
- 인스턴스 객체를 통하지 않고 , 클래스를 통해
직접 호출할 수 있는 메소드
- 인스턴스 객체를 참조하는 s e lf 인자가 필요하지 않음
- 형식
- < 호출할 메소드 이름 > = s tatic m e th o d ( 클래스내 정의한 메소드 이름 )
클래스 (c las s ) 메서드
- 클래스 영역의 데이터에 직접 접근할 수 있는 메소드
- 암시적으로 첫 인자로 클래스 객체가 전달
- 형식
- < 호출할 메소드 이름 > = c las s m e th o d ( 클래스내 정의한 메소드 이름 )
55. 연산자 중복
연산자 중복이란
- 사용자 정의 객체에서 필요한 연산자를 내장 타입과 형태와 동작
이 유사하도록 재정의
- 연산자 중복을 위하여 두 개의 밑줄 문자가 앞뒤로 있는
메소드를 미리 정의함
- 예제 코드
56. 상속
상속이란
- 부모 클래스의 모든 속성 ( 데이터 , 메소드 ) 를
자식 클래스로 물려줌
- 클래스의 공통된 속성을 부모 클래스에 정의
- 하위 클래스에서는 특화된 메소드와 데이터를 정의
장점
- 각 클래스마다 동일한 코드가 작성되는 것을 방지
- 부모 클래스에 공통된 속성을 두어 코드의
유지보수가 용이
- 각 개별 클래스에 특화된 기능을 공통된
인터페이스로 접근 가능
57. 상속
예제 코드
클래스 간의 관계 확인
- 상속 관계인 두 클래스 간의 관계를 확인
- is s u b c las s ( 자식 클래스 , 부모 클래스 )
58. 상속
다중 상속
- 2 개 이상의 클래스를 상속받는 경우
- 두 클래스의 모든 속성 ( 변수와 메소드 ) 을 전달 받음
- 예제 코드
60. 모듈 사용하기
• 파이썬 3.0 버전에서는 대략 200 개가 넘는 모듈을 지원
• 문자열 (s trin g ), 날짜 (d ate ), 시간 (tim e ), 십진법 (d e c im al), 랜덤 (ran d o m )
• 파일 (file ), o s , s q lite 3, s ys , xm l, e m ail, h ttp 등등
• 간단하게 모듈을 사용 할 수 있음
• 모듈을 사용하는 이유
• 코드의 재 사용성
• 코드를 이름공간으로 구분하고 관리 할 수 있음 .
• 복잡하고 어려운 기능을 포함하는 프로그램을 간단하게 만들 수 있다 .
61. 모듈 imp o rt
im p o rt : 모듈을 현재 이름공간으로 가져오는 역할
>>> import math
>>> math.pow(2, 10)
1024.0
>>> math.pi
3.1415926535897931
m ath 모듈은 삼각함수 , 제곱근 , 로그함수 등 수학
과 관련된 기능이 들어 있는 내장 모듈 .
d ir() 함수를 이용해 모듈에 어떠한 함수 혹은 데이터
가 들어 있는지 알 수 있다 .
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin',
'asinh‘,'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh‘,
…
62. 간단한 F TP 프로그램
F TP 로 서버에 접근해 파일 리스트를 가져오는 프로
그램 .
>>> from ftplib import FTP
>>> ftp = FTP('ftp.cwi.nl')
>>> ftp.login()
'230 Login successful.'
>>> ftp.retrlines('LIST')
drwxrwsr-x 2 ftp ftp 512 Jan 15 2001 DIENST
drwxr-xr-x 2 ftp ftp 512 Nov 16 2004 incoming
-rw-r--r-- 1 ftp ftp 1810 Jul 05 2004 incoming.readme
lrwxrwxrwx 1 ftp ftp 1 Nov 14 2004 people -> .
dr-xr-xr-x 75 ftp ftp 1536 Feb 04 07:16 pub
drwxrwsr-x 10 ftp ftp 512 Nov 09 2001 sigchi
-r--r--r-- 1 ftp ftp 2195 May 30 1995 welcome.msg
'226 Directory send OK.'
>>>ftp.quit()
'221 Goodbye.'
63. 모듈 만들기
• 사용자가 직접 모듈을 만들 수 있다 .
• 큰 프로젝트의 경우 모듈 단위로 일을 진행 하기도 함 .
• 모듈은 일반적으로 < 모듈이름 > .p y 으로 지정합니다 .
64. 모듈 임포트 방법
fro m < 모듈 > im p o rt < 어트리뷰트 >
> > > fro m s im p le s e t im p o rt u n io n
> > > u n io n ([ 1 , 2, 3] , [ 3] , [ 3, 4] )
[ 1 , 2, 3, 4]
fro m < 모듈 > im p o rt *
im p o rt < 모듈 > as < 별칭 >
- < 모듈 > 이름을 < 별칭 > 으로 변경하여 임포트합니다 .
65. 유용한 팁
• 모듈이 직접 실행 혹은 다른 곳에서 임포트 되었는지를 구분 해 줄 수
있는 __n am e __ 어트리뷰트
• 모듈이 임포트 되었을 때 __n am e __ 은 모듈 자기 자신의 이름
• 모듈이 직접 실행 되었을 때 __n am e __ 은 “ __m ain __”
66. 패키지
• 모듈의 모음
• 파이썬의 모듈 이름공간을 구조화 하는 한 방법
• 파이썬 내장 라이브러리 중 XML 패키지의 디렉터리 구조
68. 예외 ( E xc e p tio n) 란 ?
프로그램의 제어 흐름을 조정하기 위해
사용하는 이벤트
- 처리를 하지 않는 예외에 대하여 자동으로
에러 (E rro r) 가 발생하고 프로그램을 종료
- 처리되지 않은 예외 (U n h an d le d E xc e p tio n )
- ‘0’ 으로 나누는 경우
- 원격에 있는 데이터 베이스 접속시 연결되지 않는 경우
- 파일을 열었는데 사용자에 의해서 삭제된 경우
69. 주요 내장 예외
클래스 이름 내용
Exception 모든 내장 예외의 기본 클래스
- 사용자 정의 예외를 작성시 활용
ArithmeticError 수치 연산 예외의 기본 클래스
LookupError 시퀀스 관련 예외의 기본 클래스
EnvironmentError 파이썬 외부 에러의 기본 클래스
참고 자료
- 빠르게 활용하는 파이썬 3, 1 48~ 1 49 페이지
- 파이썬 공식 문서 , B u ilt- in Exc e p tio n s 부분
70. 예외 처리
try 구문
try:
< 예외 발생가능성이 있는 문장 >
e xc e p t < 예외 종류 > :
< 예외 처리 문장 >
e xc e p t ( 예외 1 , 예외 2):
< 예외 처리 문장 >
e xc e p t 예외 as 인자 :
< 예외 처리 문장 >
e ls e :
< 예외가 발생하지 않은 경우 , 수행할 문장 >
fina lly:
< 예외 발생 유무에 상관없이 try 블록 이후 수행할 문장 >
76. a s s e rt 구문
표현식
- A s s e rt < 조건식 > , < 관련 데이터 >
인자로 받은 조건식이 거짓인 경우 , As s e rtio n E rro r
가 발생
개발과정에서 디버깅 , 제약 사항 설정등으로 사용
__d e b u g __ 가 Tru e 인 경우만 as s e rt 구문 활성화
- 명령 프롬프트에서 최적화 옵션 (- O ) 을 설정하면 __d e b u g __
는 Fals e 로 설정됨
- 다음 코드와 동일
if __d e b ug __:
if no t < 조건식 > :
ra is e A s s e rtio nE rro r( < 관련 데이터 > )
79. 출력
• 화면으로 출력할 때는 p rin t() 함수를 사용합니다 . 파
이썬 버전 2.x 때는 p rin t 가 함수가 아니었지만 , 3.0
에서는 함수로 바뀌었습니다 .
• 즉 , 다음과 같이 함수처럼 괄호 안에 출력할 인자를
적으면 됩니다 .
>>> print(1)
1
>>> print('hi, guyz')
hi, guyz
• Prin t 함수의 입력인자로 다음과 같이 구분자 (s e p ),
끝라인 (e n d ), 출력 (file ) 을 지정해 줄 수 있습니다 .
아래 예제와 같이 file 을 이용해서 출력을 표준오류
(s tan d ard e rro r) 로 변경하거나 파일로 바꿀 수도 있습
니다 .
>>> print("welcome to","python", sep="~", end="!", file=sys.stderr)
welcome to~python!
80. 포맷팅 ( fo rma tting )
Prin t 만 가지고는 출력이 좀 불편하다고 느끼실 것입니다 . 그러나
fo rm at() 메소드을 사용하면 문자열을 그 이상으로 자유롭게 다룰 수
가 있습니다 .
문자열 내에서 어떤 값이 들어가길 원하는 곳은 { } 로 표시를 합니다 .
{ } 안의 값들은 숫자로 표현할 수 있으며 , fo rm at 인자들의 인덱스를
사용합니다 .
아래 예제를 보면 , { 0} 는 첫 번째 인자인 "ap p le " 을 나타내고 { 1 } 은
두 번째 인자인 "re d " 를 나타냅니다 .
- >>> print("{0} is {1}".format("apple", "red"))
apple is red
81. 포맷팅 ( fo rma tting )
{ } 안의 값을 지정할 때는 다음과 같이 fo rm at 의 인자로 키 (ke y) 와
값 (valu e ) 을 주어 위와 동일한 결과를 얻을 수 있습니다 .
- >>> print("{item} is {color}".format(item="apple", color="red"))
apple is red
d ic tio n ary 를 입력으로 받는 경우를 살펴보도록 하겠습니다 .
- >>> dic = {"item":"apple", "color":"red"}
- >>> print("{0[item]} is {0[color]}".format(dic))
apple is red
82. 포맷팅 ( fo rma tting )
앞에서 { 0[ ite m ] } 의 0[ ] 을 달고 다니느라 매우 불편하셨을 텐데요 ,
* * 기호를 사용하면 d ic tio n ary 를 입력으로 받은 것으로 판단하고 인
자를 하나만 받게 됩니다 . 그러므로 아래와 같이 불필요한 in d e x 는
생략할 수 있습니다 .
- >>> print("{item} is {color}".format(**dic))
apple is red
83. 입력
사용자로부터 입력은 다음과 같이 in p u t() 함수를 이용해서 받을 수 있
습니다 .
in p u t 의 입력인자로는 화면에 출력할 프롬프트 (p ro m p t) 를 줄 수 있으
며 , 생략 가능하며 , 결과값으로는 문자열 객체를 반환합니다 .
- >>> a = input('insert any keys :')
insert any keys : test
- >>> print(a)
test
84. 파일 입출력
파일로의 입출력은 앞에서 본 바와 같이 p rin t() 함수의 file 입력인자
를 이용할 수도 있지만 , 파일 입출력 제어를 보다 세밀하게 하기 위해
서는 o p e n () 함수를 통해서 파일을 연 후 파일 전용 함수들을 이용해
서 작업하는 것이 일반적입니다 .
- >>> f = open('test.txt', 'w')
O p e n 함수의 마지막 인자는 파일을 열 때의 속성을 의미하며 , 다음
속성들의 조합으로 사용이 가능합니다 .
- r : 읽기 모드 ( 디폴트 )
- w : 쓰기 모드
- a : 쓰기 + 이어쓰기 모드
- + : 읽기 + 쓰기 모드
- b : 바이너리 모드
- t : 텍스트 모드 ( 디폴트 )
85. 파일 입출력
파일로부터 읽고 쓰기 위해서 파일로부터 모든 데이터를 읽는 re ad ()
함수와 문자열을 쓰는 write () 함수가 제공됩니다 . 또한 파일을 열고
할 일을 모두 완료했을 경우 파일객체를 닫아주는 c lo s e () 함수가 있
습니다 .
- >>> f = open('test.txt', 'w')
- >>> f.write('plow deepnwhile sluggards sleep')
31
- >>> f.close()
86. 파일 입출력
이번에는 이 파일이 제대로 쓰였는지 읽어 보도록 하겠습니다 .
- >>> f = open('test.txt')
- >>> f.read()
'plow deepnwhile sluggards sleep'
- >>> f.close()
- >>> f.closed
True
텍스트 모드에서는 일반 문자열과 같이 e n c o d in g 이 적용되기 때문에
, 바이너리 데이터 (b in ary d ata) 를 다룰 때에는 오류가 발생하게 됩니
다 . 그러므로 바이너리 데이터를 다룰 때에는 반드시 바이너리 모드를
사용해야 합니다 .
87. 파일 입출력
파일 입출력 관련 함수들
- re ad lin e () 함수는 호출할 때 마다 한 줄씩 읽은 문자열을 반환하며 ,
re ad lin e s () 함수는 파일의 모든 내용을 줄 단위로 잘라서 리스트를 반환합니다 .
- te ll() 함수는 현재 파일에서 어디까지 읽고 썼는지 위치를 반환하며 ,
s e e k() 함수는 사용자가 원하는 위치로 포인터를 이동합니다 .
With ~ as 구문
- >>> with open('test.txt') as f:
[TAB]print( f.readlines() )
[TAB]print( f.closed )
- ['plow deepn', 'while sluggards sleep']
False
- >>> f.closed
True
88. P ic kle
그런데 문자열의 경우에는 배운 방법을 사용하여 쉽게 다룰 수 있지
만 , 리스트나 클래스 등을 저장할 때는 어떻게 해야 할까요 ?
내용을 모두 분해해서 파일에 저장한 후 , 다시 읽어 들일 때는 구분해
서 다시 값을 설정해야 할까요 ?
이러한 일들을 쉽게 할 수 있도록 도와주는 p ic kle 모듈 .
89. P ic kle
다음과 같이 리스트가 있다고 가정합니다 .
- >>> colors = ['red', 'green', 'black']
아래와 같이 p ic kle 모듈의 d u m p 함수를 사용하면 , c o lo rs 를 다음과
같이 쉽게 파일에 저장할 수 있습니다 .
- >>> import pickle
- >>> f = open('colors', 'wb')
- >>> pickle.dump(colors, f)
- >>> f.close()
90. P ic kle
이번에는 파일로부터 다시 읽어보겠습니다 . 우선 c o lo rs 를 삭제한
후 , lo ad 함수를 이용해서 리스트를 읽어 들입니다 .
- >>> del colors
- >>> f = open('colors', 'rb')
- >>> colors = pickle.load(f)
- >>> f.close()
- >>> colors
['red', 'green', 'black']
p ic kle 로 파일에 쓰거나 읽을 때는 반드시 바이너리 모드로 파일을 열
어야 합니다 .
91. P ic kle
p ic kle 로 저장할 수 있는 대상은 파이썬 객체라면 거의 모두 가능합니
다.
기본 자료형은 물론이고 아래 예제와 같이 사용자가 정의한 클래스 객
체도 p ic kle 이 가능합니다 .
- >>> class test:
[TAB]var = None
- >>> a = test()
- >>> a.var = 'Test'
- >>> f = open('test', 'wb')
- >>> pickle.dump(a, f)
- >>> f.close()
- >>> f = open('test', 'rb')
- >>> b = pickle.load(f)
- >>> f.close()
- >>> b.var
'Test'