SlideShare a Scribd company logo
1 of 92
P ytho n3
B rie f S u m m ary




                      S K p la ne t
                          신호철
파이썬이란 …




•   1 991 년 귀도 반 로썸 (G u id o van Ro s s u m ) 이 발표 .

•   사용자 층이 점점 넓어지는 중 .

•   아직 개발에서 많이 사용되지는 않지만 ,
    웹업계보다 비교적 척박한 임베디드업계에서도
    노키아 (N o kia) 등에서 지원하고 있습니다 .
파이썬의 특징



 가독성
 - 간결하고 가독성이 좋습니다 .
 - 코드블럭을 들여쓰기 (in d e n tatio n ) 로 구분 .

 풍부한 라이브러리
 접착성
 무료
 유니코드
 동적타이핑
파이썬의 특징



 가독성
 풍부한 라이브러리
 - 매우 광범위한 라이브러리가 기본으로 포함되어 있음 .
 - 외부 라이브러리가 풍부하며 확장이 쉬움 .

 접착성
 무료
 유니코드
 동적타이핑
파이썬의 특징



 가독성
 풍부한 라이브러리
 접착성
 - 쉽게 라이브러리를 추가할 수가 있습니다 .
 - 파이썬에서 C 로 구현된 부분을 사용할 수도 있으며 ,
   C 에서 파이썬을 사용할 수도 있습니다 .

 무료
 유니코드
 동적타이핑
파이썬의 특징



 가독성
 풍부한 라이브러리
 접착성
 무료
 - 파이썬은 파이썬 소프트웨어 재단 (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 .
 유니코드
 동적타이핑
파이썬의 특징



 가독성
 풍부한 라이브러리
 접착성
 무료
 유니코드
 - 파이썬에서의 문자열들은 모두 유니코드입니다 .
 - 우리가 한글 , 한자 등을 표현하려고 특별한 노력을 할 필요가 없습니다 .
 동적타이핑
파이썬의 특징



 가독성
 풍부한 라이브러리
 접착성
 무료
 유니코드
 동적타이핑
 - 런타임 시에 타입 체크를 하는 동적타이핑을 지원하며 ,
 - 메모리 관리 자동으로 합니다 .
파이썬의 종류



 C p yth o n
 Jyth o n
 Iro n Pyth o n
 PyPy
파이썬이 쓰이는 프로젝트들



•   알게 모르게 파이썬이 사용되는 프로젝트들이 많
    습니다 .
    • 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
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 체계 변경 .
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 체계 변경 .
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 체계 변경 .
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 '>
He llo Wo rld



•   > > > p rin t("h e llo wo rld ")
    h e llo wo rld
들여쓰기



 들여쓰기 (in d e n tatio n ) 는 파이썬 문법의 가장 큰 특징입니다 .
 - 가독성을 높이지만 , 오류가 일어나지 않도록 조심해야 합니다 .


 - 코드블럭 1
   [ TAB ] 코드블럭 2
   코드블럭 3
   [ TAB ] 코드블럭 4
소스코드 인코딩



 파이썬에서는 # 이후는 주석으로 인식합니다 .
 그러나 다음과 같이 ,
  소스코드 부분에서 사용될 경우 ,
  소스코드 인코딩을 지정하는 용도로 사용됩니다 .

- # c o d in g : latin - 1
- # - * - c o d in g : u tf- 8 - * -
기타 파이썬 문법


•   한 라인에 여러 구문이 올 경우에는 세미콜론 (;)
    을 사용해야 합니다 .
    • >>> a= 1; b = 2
•   들여쓰기 (in d e n tatio n ) 이 중요하지만 , 문장이 아
    직 안 끝난 경우에는 들여쓰기를 안 해도 문법오
    류가 나지 않습니다 .
    • > > > a = (1 +
      [ TAB ] 2 +
      3+
      [ TAB ] [ S ] [ S ] 4)
      >>> a
      10
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
변수
변수명


•   문자 , 숫자 , 밑줄 (_) 로 구성됩니다 .
    숫자는 처음에 나올 수 없습니다 .
•   대소문자를 구분합니다 .
•   예약어 사용 불가 .

    e x.
           >>>   frie n d = 1 0
           >>>   Frie n d = 1
           >>>   frie n d
           10
           >>>   Frie n d
           1
수치
 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))


 연산자
  - + , - , * , /, //, % , * * , =
문자


 ‘s trin g ’, “s trin g ”,
  “”” 줄바꿈도
  그대로 적용됩니다”””


 E s c ap e 문자
       Escape 문자 사용예          의미

       n                     개행 ( 줄바꿈 )

       t                     탭

       r                     캐리지 리턴

       0                     널 (N u ll)

                            문자 ‘  ’

       ’                     단일 인용부호 (‘)

       ”                     이중 인용부호 (“)
문자


 + , * 연산자
 - > > > ‘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 ’
유니코드


 모든 문자열 (s trin g ) 이 기본적으로 유니코드입니다 .
 유니코드 이외의 인코딩이 있는 문자열은 b yte s 로 표현됩니다 .
 - >>> type(' 가 ')
   <class 'str'>
   >>> ' 가 '.encode('utf-8')
   b'xeaxb0x80'
   >>> type(' 가 '.encode('utf-8'))
   <class 'bytes'>
리스트

 리스트는 쉽게 값들의 나열이라고 생각하시면 됩니다 .
 또한 , 인덱싱과 슬라이싱도 가능합니다 .
 - >>> 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']
리스트

 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 로 정렬을 할 수도 있습니다 .
튜플

 튜플 (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
딕셔너리

 딕셔너리는 키와 값의 쌍으로 이루어져 있으며 , 다음과 같이 정의할 수 있습니
  다.
 - >>> 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'}
딕셔너리

 딕셔너리의 내용을 얻기 위해서는 다음과 같이 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
   {}
함수
함수의 정의



 함수의 선언은 d e f 로 시작하고 콜론 (:) 으로 끝낸다
  .


 함수의 시작과 끝은 코드의 들여쓰기로 구분


 시작과 끝을 명시해 줄 필요가 없다 .


 헤더 (h e ad e r) 파일 , 인터페이스 (in te rfac e )/ 구현
  (im p le m e n tatio n ) 같은 부분으로 나누지 않음
함수 선언

 함수 선언 문법




 간단한 함수 선언해 보기
 - 입력 받은 Times(a, b): 서로 곱한 값을 리턴한다 .
       def 2 개의 인수를
         return a*b

      >>> Times(10, 10)
      100
스코핑 룰 (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 을 이용
파이썬에서 인수 모드 - 1
• 기본 인수 값
  •   함수를 호출 할 때 인수를 지정해 주지 않아도 기본 값이
      할당되도록 하는 방법 .




• 키워드 인수
  •   인수 이름으로 값을 전달하는 방식
  •   변수의 이름으로 특정 인수를 전달할 수 있다 .
파이썬에서 인수 모드 - 2
• 가변인수 리스트
  •   인수의 개수가 정해지지 않은 가변 인수를 전달
  •   * 를 사용하며 인수는 튜플 형식으로 전달 됨 .




• 정의되지 않은 인수 처리하기 .
  •   * * 를 사용하면 정의되지 않은 인수를 사전형식으로 전달
람다 (lambda) 함수

•   이름이 없는 1 줄 짜리 함수


•   한 줄의 간단한 함수가 필요한 경우
•   프로그램의 가독성을 위해서
•   함수를 인수로 넘겨 줄 때
pass 구문 (statement)

•   아무 일도 하지 않습니다 .




•   아무것도 하지 않는 함수 , 모듈 , 클래스를 만들
    어야 할 경우가 있는데 . 이 때 p as s 가 사용될 수
    있다 .
     >>> def sample():
               pass

     >>> sample()
     >>>
     >>>
__doc__ 속성과 help 함수
•   h e lp 함수를 이용해 함수의 설명을 볼 수 있다 .
    >>> help(print)
•   사용자가 만든 함수도 h e lp 를 사용해 설명을 볼
    수 있다 .




•   조금 더 자세한 설명을 추가 하려면 __d o c __ 속성
    을 이용한다 .
제어
if 문

                     if < 조건식 > :
                           < 구문 >




 조건식을 평가하고 참인 경우만 구문이 수행
 2 개 이상의 구문은 들여쓰기로 블록을 지정
 - 함수와 동일
 - 들여쓰기의 정도는 파일 전체를 통틀어 일치해야 함
e lif, e ls e

                                  if < 조건식 1> :
                                        < 구문 1>
                                  elif < 조건식 2> :
                                        < 구문 2>
                                  else:
                                        < 구문 3>




 e lif
  - 2 개 이상의 조건을 처리하는 경우
  - if 는 가장 처음에만 사용할 수 있는 반면에 ,
    e lif 는 필요한 만큼 사용 가능

 e ls e
  - 어떠한 조건에도 해당하지 않는 경우
  - 가장 마지막에만 사용 가능
while 문


                           while < 조건식 > :
                                < 구문 >




 조건식이 참 (Tru e ) 인 동안 내부 구문을 반복 수행
 - 조건식은 구문이 수행되기 이전에 우선 평가
 - 구문을 모두 수행 이후 다시 조건식을 재평가
 - 조건식이 거짓 (Fals e ) 이면 wh ile 문 구조를 벗어남
fo r 문


                   for < 아이템 I> in < 시퀀스형 객체 S> :
                        < 구문 >




 시퀀스형 객체를 순차적으로 순회
 - ‘ 시퀀스형 객체 S ’ 의 각 아이템을 ‘ 아이템 I’ 에 할당
 - 할당된 아이템 I 를 가지고 구문을 수행
 - 모든 아이템을 순회하거나 b re ak 을 만나면 fo r 문이 종료
b re a k



 b re ak 을 만나면 반복문 내부 블록을 벗어남
c o ntinue



 c o n tin u e 이후 반복문 내부 블록을 수행하지 않고 ,
  다음 아이템을 선택하여 내부 블록의 시작 지점으로
  이동
e ls e

 반복문 수행도중 b re ak 로 인하여 중간에 종료되지
  않고 끝가지 수행되었을 때 , e ls e 블록이 수행
 - e ls e 블록이 수행되는 경우




 - e ls e 블록이 수행되지 않는 경우
리스트 내장

•   [ < 표현식 > fo r < 아이템 > in < 시퀀스 객체 > ( if < 조건
    식 >) ]
-   기존 시퀀스 객체를 이용하여 추가적인 연산을 통하여 새로운 리
    스트 객체를 생성
리스트 내장
•   [ < 표현식 > fo r < 아이템 > in < 시퀀스 객체 > ( if < 조건
    식 >) ]
-   조건식을 이용하여 원본 객체에서 조건을 만족하는 아이템만 선
    별




 원본 리스트가 2 개인 경우
클래스
클래스 기본

 클래스와 인스턴스




 클래스와 인스턴스 이름 공간
클래스와 인스턴스 관계

 is in s tan c e ( 인스턴스 객체 , 클래스 객체 )
 - 인스턴스 객체가 어떤 클래스로부터 생성되었는지 확인
 - 불린 형태로 결과 반환


 - 예제 코드
생성자와 소멸자
 생성자
 - 생성시 초기화 작업을 수행
 - 인스턴스 객체가 생성될 때 자동으로 호출
 - __in it__()
 소멸자
 - 소멸시 종료 작업을 수행
 - 인스턴스 객체의 참조 카운터가 '0' 이 될 때 호출
 - __d e l__()


 예제 코드
메서드 확장

 정적 (s tatic ) 메서드
 - 인스턴스 객체를 통하지 않고 , 클래스를 통해
   직접 호출할 수 있는 메소드
  - 인스턴스 객체를 참조하는 s e lf 인자가 필요하지 않음

 - 형식
  - < 호출할 메소드 이름 > = s tatic m e th o d ( 클래스내 정의한 메소드 이름 )




 클래스 (c las s ) 메서드
 - 클래스 영역의 데이터에 직접 접근할 수 있는 메소드
  - 암시적으로 첫 인자로 클래스 객체가 전달

 - 형식
  - < 호출할 메소드 이름 > = c las s m e th o d ( 클래스내 정의한 메소드 이름 )
연산자 중복

 연산자 중복이란
- 사용자 정의 객체에서 필요한 연산자를 내장 타입과 형태와 동작
  이 유사하도록 재정의
- 연산자 중복을 위하여 두 개의 밑줄 문자가 앞뒤로 있는
  메소드를 미리 정의함


- 예제 코드
상속
 상속이란
 - 부모 클래스의 모든 속성 ( 데이터 , 메소드 ) 를
   자식 클래스로 물려줌
 - 클래스의 공통된 속성을 부모 클래스에 정의
 - 하위 클래스에서는 특화된 메소드와 데이터를 정의


 장점
 - 각 클래스마다 동일한 코드가 작성되는 것을 방지
 - 부모 클래스에 공통된 속성을 두어 코드의
   유지보수가 용이
 - 각 개별 클래스에 특화된 기능을 공통된
   인터페이스로 접근 가능
상속

 예제 코드




 클래스 간의 관계 확인
 - 상속 관계인 두 클래스 간의 관계를 확인
  - is s u b c las s ( 자식 클래스 , 부모 클래스 )
상속

 다중 상속
 - 2 개 이상의 클래스를 상속받는 경우
 - 두 클래스의 모든 속성 ( 변수와 메소드 ) 을 전달 받음


 - 예제 코드
모듈
모듈 사용하기

• 파이썬 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 등등



• 간단하게 모듈을 사용 할 수 있음


• 모듈을 사용하는 이유

 • 코드의 재 사용성

 • 코드를 이름공간으로 구분하고 관리 할 수 있음 .


 • 복잡하고 어려운 기능을 포함하는 프로그램을 간단하게 만들 수 있다 .
모듈 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‘,
  …
간단한 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.'
모듈 만들기



 • 사용자가 직접 모듈을 만들 수 있다 .


 • 큰 프로젝트의 경우 모듈 단위로 일을 진행 하기도 함 .


 • 모듈은 일반적으로 < 모듈이름 > .p y 으로 지정합니다 .
모듈 임포트 방법



 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 < 별칭 >
 - < 모듈 > 이름을 < 별칭 > 으로 변경하여 임포트합니다 .
유용한 팁


• 모듈이 직접 실행 혹은 다른 곳에서 임포트 되었는지를 구분 해 줄 수
  있는 __n am e __ 어트리뷰트
 • 모듈이 임포트 되었을 때 __n am e __ 은 모듈 자기 자신의 이름
 • 모듈이 직접 실행 되었을 때 __n am e __ 은 “ __m ain __”
패키지

• 모듈의 모음
• 파이썬의 모듈 이름공간을 구조화 하는 한 방법
• 파이썬 내장 라이브러리 중 XML 패키지의 디렉터리 구조
예외처리
예외 ( E xc e p tio n) 란 ?

 프로그램의 제어 흐름을 조정하기 위해
  사용하는 이벤트
 - 처리를 하지 않는 예외에 대하여 자동으로
   에러 (E rro r) 가 발생하고 프로그램을 종료




 - 처리되지 않은 예외 (U n h an d le d E xc e p tio n )
   - ‘0’ 으로 나누는 경우
   - 원격에 있는 데이터 베이스 접속시 연결되지 않는 경우
   - 파일을 열었는데 사용자에 의해서 삭제된 경우
주요 내장 예외

클래스 이름               내용
Exception            모든 내장 예외의 기본 클래스
                     - 사용자 정의 예외를 작성시 활용
ArithmeticError      수치 연산 예외의 기본 클래스
LookupError          시퀀스 관련 예외의 기본 클래스
EnvironmentError 파이썬 외부 에러의 기본 클래스




 참고 자료
 - 빠르게 활용하는 파이썬 3, 1 48~ 1 49 페이지
 - 파이썬 공식 문서 , B u ilt- in Exc e p tio n s 부분
예외 처리
 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 블록 이후 수행할 문장 >
예외 처리 - 2



•   try ~ e xc e p t 예제




     –   수행 결과
예외 처리 - 3
 F in ally




  - 수행 결과
ra is e 구문

 명시적으로 예외 발생
 rais e 구문 형식
 - rais e [ E xc e p tio n ]
 - rais e [ E xc e p tio n (d ata)]
 - rais e

 예제 7- 4- 1
사용자 정의 예외

 내장 예외만으로 부족한 경우 , 개발자가 직접 예외
  를 정의하여 사용 가능
 - Exc e p tio n 클래스나 그 하위 클래스를 상속받아서 구현
 - 생성자에 클래스 멤버 변수를 이용하여 인자를
   에러 처리부로 전달


 예제 7- 5- 1
사용자 정의 예외 - 2

 예제 7- 5- 1




 수행 결과
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( < 관련 데이터 > )
a s s e rt 구문 - 2

 As s e rt 예제




 수행 결과
입출력
출력

•   화면으로 출력할 때는 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!
포맷팅 ( 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
포맷팅 ( 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
포맷팅 ( 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
입력

 사용자로부터 입력은 다음과 같이 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
파일 입출력

 파일로의 입출력은 앞에서 본 바와 같이 p rin t() 함수의 file 입력인자
  를 이용할 수도 있지만 , 파일 입출력 제어를 보다 세밀하게 하기 위해
  서는 o p e n () 함수를 통해서 파일을 연 후 파일 전용 함수들을 이용해
  서 작업하는 것이 일반적입니다 .
 - >>> f = open('test.txt', 'w')

 O p e n 함수의 마지막 인자는 파일을 열 때의 속성을 의미하며 , 다음
  속성들의 조합으로 사용이 가능합니다 .
 - r : 읽기 모드 ( 디폴트 )
 - w : 쓰기 모드
 - a : 쓰기 + 이어쓰기 모드
 - + : 읽기 + 쓰기 모드
 - b : 바이너리 모드
 - t : 텍스트 모드 ( 디폴트  )
파일 입출력

 파일로부터 읽고 쓰기 위해서 파일로부터 모든 데이터를 읽는 re ad ()
  함수와 문자열을 쓰는 write () 함수가 제공됩니다 . 또한 파일을 열고
  할 일을 모두 완료했을 경우 파일객체를 닫아주는 c lo s e () 함수가 있
  습니다 .
 - >>> f = open('test.txt', 'w')
 - >>> f.write('plow deepnwhile sluggards sleep')
   31
 - >>> f.close()
파일 입출력

 이번에는 이 파일이 제대로 쓰였는지 읽어 보도록 하겠습니다 .
 - >>> 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) 를 다룰 때에는 오류가 발생하게 됩니
  다 . 그러므로 바이너리 데이터를 다룰 때에는 반드시 바이너리 모드를
  사용해야 합니다 .
파일 입출력
 파일 입출력 관련 함수들
 - 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
P ic kle


 그런데 문자열의 경우에는 배운 방법을 사용하여 쉽게 다룰 수 있지
  만 , 리스트나 클래스 등을 저장할 때는 어떻게 해야 할까요 ?
 내용을 모두 분해해서 파일에 저장한 후 , 다시 읽어 들일 때는 구분해
  서 다시 값을 설정해야 할까요 ?
 이러한 일들을 쉽게 할 수 있도록 도와주는 p ic kle 모듈 .
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()
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 로 파일에 쓰거나 읽을 때는 반드시 바이너리 모드로 파일을 열
  어야 합니다 .
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'
감사합니다 .

More Related Content

What's hot

Python datatype
Python datatypePython datatype
Python datatype건희 김
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 Yong Joon Moon
 
파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function건희 김
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Yong Joon Moon
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열Kim YoSep
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10Nam Hyeonuk
 
파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301Yong Joon Moon
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815Yong Joon Moon
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Yong Joon Moon
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 

What's hot (20)

Python datatype
Python datatypePython datatype
Python datatype
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10
 
파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
2012 Ds 03
2012 Ds 032012 Ds 03
2012 Ds 03
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 

Viewers also liked

ML + 주식 phase 2
ML + 주식  phase 2ML + 주식  phase 2
ML + 주식 phase 2HoChul Shin
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summaryHoChul Shin
 
머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기HoChul Shin
 
부동산 텔레그램 봇
부동산 텔레그램 봇부동산 텔레그램 봇
부동산 텔레그램 봇HoChul Shin
 
부동산 텔레그램봇 사내공유 @Tech
부동산 텔레그램봇 사내공유 @Tech부동산 텔레그램봇 사내공유 @Tech
부동산 텔레그램봇 사내공유 @TechHoChul Shin
 
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.Yongho Ha
 

Viewers also liked (7)

ML + 주식 phase 2
ML + 주식  phase 2ML + 주식  phase 2
ML + 주식 phase 2
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summary
 
머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기
 
Lua vs python
Lua vs pythonLua vs python
Lua vs python
 
부동산 텔레그램 봇
부동산 텔레그램 봇부동산 텔레그램 봇
부동산 텔레그램 봇
 
부동산 텔레그램봇 사내공유 @Tech
부동산 텔레그램봇 사내공유 @Tech부동산 텔레그램봇 사내공유 @Tech
부동산 텔레그램봇 사내공유 @Tech
 
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
 

Similar to Python3 brief summary

빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차Han Sung Kim
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R BasicsYoonwhan Lee
 
고등학생 R&E Python summary for test
고등학생 R&E Python summary for test고등학생 R&E Python summary for test
고등학생 R&E Python summary for testKyunghoon Kim
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의Kwangyoun Jung
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리ultrasuperrok
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623Yong Joon Moon
 
C수업자료
C수업자료C수업자료
C수업자료koominsu
 
C수업자료
C수업자료C수업자료
C수업자료koominsu
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 

Similar to Python3 brief summary (20)

빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
고등학생 R&E Python summary for test
고등학생 R&E Python summary for test고등학생 R&E Python summary for test
고등학생 R&E Python summary for test
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
 
자료구조02
자료구조02자료구조02
자료구조02
 
C review
C  reviewC  review
C review
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
C수업자료
C수업자료C수업자료
C수업자료
 
C수업자료
C수업자료C수업자료
C수업자료
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
Perl Script
Perl ScriptPerl Script
Perl Script
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
자구2번
자구2번자구2번
자구2번
 

Python3 brief summary

  • 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 문이 종료
  • 45. b re a k  b re ak 을 만나면 반복문 내부 블록을 벗어남
  • 46. c o ntinue  c o n tin u e 이후 반복문 내부 블록을 수행하지 않고 , 다음 아이템을 선택하여 내부 블록의 시작 지점으로 이동
  • 47. e ls e  반복문 수행도중 b re ak 로 인하여 중간에 종료되지 않고 끝가지 수행되었을 때 , e ls e 블록이 수행 - e ls e 블록이 수행되는 경우 - e ls e 블록이 수행되지 않는 경우
  • 48. 리스트 내장 • [ < 표현식 > fo r < 아이템 > in < 시퀀스 객체 > ( if < 조건 식 >) ] - 기존 시퀀스 객체를 이용하여 추가적인 연산을 통하여 새로운 리 스트 객체를 생성
  • 49. 리스트 내장 • [ < 표현식 > fo r < 아이템 > in < 시퀀스 객체 > ( if < 조건 식 >) ] - 조건식을 이용하여 원본 객체에서 조건을 만족하는 아이템만 선 별  원본 리스트가 2 개인 경우
  • 51. 클래스 기본  클래스와 인스턴스  클래스와 인스턴스 이름 공간
  • 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 블록 이후 수행할 문장 >
  • 71. 예외 처리 - 2 • try ~ e xc e p t 예제 – 수행 결과
  • 72. 예외 처리 - 3  F in ally - 수행 결과
  • 73. ra is e 구문  명시적으로 예외 발생  rais e 구문 형식 - rais e [ E xc e p tio n ] - rais e [ E xc e p tio n (d ata)] - rais e  예제 7- 4- 1
  • 74. 사용자 정의 예외  내장 예외만으로 부족한 경우 , 개발자가 직접 예외 를 정의하여 사용 가능 - Exc e p tio n 클래스나 그 하위 클래스를 상속받아서 구현 - 생성자에 클래스 멤버 변수를 이용하여 인자를 에러 처리부로 전달  예제 7- 5- 1
  • 75. 사용자 정의 예외 - 2  예제 7- 5- 1  수행 결과
  • 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( < 관련 데이터 > )
  • 77. a s s e rt 구문 - 2  As s e rt 예제  수행 결과
  • 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'