SlideShare une entreprise Scribd logo
1  sur  108
Télécharger pour lire hors ligne
PythonIntermediateProgramming
임찬식(chanshik@gmail.com)
1
PythonIntermediateProgramming
타입과 객체
함수와함수형프로그래밍
클래스와객체지향프로그래밍
데이터구조
튜닝과 최적화
2
타입과 객체
파이썬에서모든데이터는객체라는개념을사용하여저장
기본이되는숫자, 문자열, 리스트, 사전은모두객체
클래스를사용해사용자정의객체를생성해사용
인터프리터내부에서사용하는객체도존재
3
용어
프로그램에서저장하는모든데이터는객체
객체는신원(identity), 타입(혹은클래스), 값을가짐
>>> a = 42
# 42 라는 값을 갖는 정수(타입) 객체, 신원은 객체가 메모리에 저장된 위치
특정타입의객체가 생성되면해당객체를그 타입의인스턴스라고 부름
인스턴스는신원과 타입을변경할수없음
인스턴스값을변경할수있는지여부에따라
변경 가능(mutable)
변경 불가능(immutable)
다른객체에대한참조들을담는객체를컨테이너혹은컬렉션이라부름
객체는대부분몇개의속성과 메서드로특징지어짐
4
객체신원과 타입
내장함수인id()는객체의신원을나타내는정수를반환
일반적으로id() 함수반환값은메모리상에서객체가 위치한곳을나타냄
파이썬구현에따라달라질수있음
>>> a = 42
>>> b = "Python"
>>> id(a)
4435590512
>>> id(b)
4440351720
5
객체신원과 타입
is 연산자를이용해두객체의신원을비교하는여러가지방법
# 두 객체를 비교한다
def compare(a, b):
if a is b:
print("a 와 b 는 동일한 객체")
if a == b:
print("a 와 b 는 동일한 값")
if type(a) is type(b):
print("a 와 b 는 동일한 타입")
>>> a = 42
>>> b = 30
>>> compare(a, b)
a 와 b 는 동일한 타입
6
객체신원과 타입
객체타입은객체의클래스라고 하며그 자체도객체로존재
타입객체는고유하게 정의
주어진타입의모든인스턴스에대해서항상동일
타입은is 연산자로비교 가능
>>> item = 10
>>> s = [1, 2, 3]
>>> if type(s) is list:
... s.append(item)
...
>>> s
[1, 2, 3, 10]
7
객체신원과 타입
타입은클래스를통해특수화(specialization)가 가능하기 때문에
isinstance(object, type) 을사용하여검사하는것이좋음
isinstance() 함수는클래스상속관계를인식하여타입검사수행
>>> item = 10
>>> s = [1, 2, 3]
>>> if isinstance(s, list):
... s.append(item)
...
>>> s
[1, 2, 3, 10]
8
참조횟수와쓰레기 수집
모든객체는참조횟수(referencecount)를유지하며, 이값이0이되면
쓰레기 수집(garbagecollection) 단계를거쳐메모리를반납
참조횟수를증가시키는경우
객체가 새로운이름에대입
리스트, 튜플, 사전같은컨테이너에추가
>>> import sys
>>> a = 42
>>> sys.getrefcount(a)
9
>>> b = a
>>> sys.getrefcount(a)
10
>>> c = [a]
>>> sys.getrefcount(a)
11
9
참조횟수와쓰레기 수집
참조횟수를감소시키는경우
del연산자사용
참조가 유효범위를벗어날경우
>>> import sys
>>> a = 42
>>> sys.getrefcount(a)
9
>>> b = a
>>> sys.getrefcount(a)
10
>>> del b
>>> sys.getrefcount(a)
9
인터프리터는숫자나문자열같은변경 불가능한객체에의해사용되는
메모리를절약하기 위해이들을여러곳에서최대한공유
10
참조횟수와쓰레기 수집
순환참조가 존재할경우에는참조횟수를줄일수가 없어메모리를계속점유
>>> import sys
>>> a = {}
>>> b = {}
>>> sys.getrefcount(b)
2
>>> a['b'] = b
>>> sys.getrefcount(b)
3
>>> del a
>>> sys.getrefcount(b)
2
>>> a = {'b': b}
>>> b['a'] = a
>>> del a
>>> sys.getrefcount(b)
3
11
참조횟수와쓰레기 수집
dela를실행해도b객체참조횟수가 줄어들지않아할당된그대로
메모리를계속점유하게 됨
순환참조에의한메모리점유를방지하기 위해서
인터프리터는주기적으로접근 불가능한객체들의순환참조를감지하는
순환참조감지기(cycledetector)를구동해메모리확보
12
참조와복사
프로그램에서a= b대입이숫자, 문자열같은변경 불가능한객체에대해서
수행되면b에대한복사본이생성되는것처럼작동
리스트나사전같은변경 가능한객체에대해서대입이이루어질경우에는
변경 불가능한객체에대입한경우와는다른결과를보여줌
13
참조와복사
>>> a = [1, 2, 3, 4]
>>> b = a
>>> b is a
True
>>> b[2] = 42
>>> a
[1, 2, 42, 4]
a와b가 동일한객체를참조하기 때문에두변수중하나에가해진변화가
다른변수에서도그대로나타남
이러한영향을방지하려면객체에대한참조가 아니라복사본을생성해서사용
14
참조와복사
리스트나사전같은컨테이너객체에적용되는복사연산에는
얕은복사와깊은복사두가지가 존재
얕은복사: 새로운객체를생성하지만그 안은원래있던참조로채워짐
깊은복사: 새로운객체생성후안에있는모든객체를재귀적으로복사
15
얕은복사
a와b는서로다른리스트객체이지만, 그 안의원소는공유
b의한원소에가한변화는a에서도그대로나타남
>>> a = [1, 2, [3, 4]]
>>> b = list(a) # a 에 대한 얕은 복사본 생성
>>> b is a
False
>>> b.append(42) # b 에 새로운 원소 추가
>>> b
[1, 2, [3, 4], 42]
>>> a # a 에 아무런 변화 없음
[1, 2, [3, 4]]
>>> b[2][0] = 100 # b 안에 있는 리스트 중 첫번째 원소 변경
>>> b
[1, 2, [100, 4], 42]
>>> a # a 도 변경됨
[1, 2, [100, 4]]
16
깊은복사
>>> import copy
>>> a = [1, 2, [3, 4]]
>>> b = copy.deepcopy(a) # 깊은 복사를 거쳐 b 생성
>>> b[2][0] = 42
>>> b
[1, 2, [42, 4]]
>>> a # a 가 변경되지 않음
[1, 2, [3, 4]]
17
1급 객체
파이썬에서모든객체는'1급 (first class)' 객체
식별자로명명될수있는모든객체는동일한지위를가짐
이름을가질수있는모든객체는데이터로서취급 가능
>>> items = {
... 'number': 42, # 일반적인 정수형 데이터
... 'text': 'Hello, World!' # 문자열 데이터
... }
>>> items["func"] = abs # abs() 함수 추가
>>> import math
>>> items["math"] = math # 모듈 추가
>>> items["error"] = ValueError # 예외 타입
>>> nums = [1, 2, 3, 4]
>>> items["append"] = nums.append # 다른 객체 메서드 추가
위예제코드에서보는것처럼함수나모듈, 예외타입등모든객체를
데이터로서취급하는것이가능
18
1급 객체
다양한객체를사전에넣고 이를이용해코드실행
>>> items["func"](-42) # abs(-42) 실행
42
>>> items["math"].sqrt(16) # math.sqrt(16) 실행
4.0
>>> try:
... x = int("invalid")
... except items["error"] as e: # except ValueError as e:
... print("Convert failed")
...
Convert failed
>>> items["append"](42) # nums.append(42) 실행
>>> nums
[1, 2, 3, 4, 42]
19
1급 객체
문자열을타입객체리스트를이용해변환하는방법
>>> s = "HELLO,100,3.14"
>>> types = [str, int, float]
>>> values = s.split(",")
>>>
>>> fields = [ty(val) for ty, val in zip(types, values)]
>>> print(fields)
['HELLO', 100, 3.14]
문자열안에있는필드각각을나타낼수있는타입리스트먼저생성후
(타입, 값) 쌍을만들어타입(값) 형태로필드생성
20
데이터표현을위한내장타입
파이썬에서대부분의데이터를표현하는데사용할수있는내장데이터타입
없음: type(None)
숫자: int, float, complex, long(Python2)
순서열: str, list, tuple, unicode(Python2)
매핑: dict
집합: set, frozenset
21
데이터표현을위한내장타입
타입범주 타입이름 설명
없음(None) type(None) 널객체인None
숫자(Number)
int 정수
long 임의정밀도정수(Python2)
float 부동소수점
complex 복소수
bool 불리언(True/ False)
22
데이터표현을위한내장타입
타입범주 타입이름 설명
순서열(sequence)
str 문자열
unicode 유니코드문자열(Python2)
list 리스트
tuple 튜플
xrange 함수로생성되는정수범위
(python2)
23
데이터표현을위한내장타입
타입범주 타입이름 설명
매핑(mapping) dict 사전
집합(set)
set 변경 가능한집합
frozenset 변경 불가능한집합
24
None타입
아무값이없는객체를나타냄
프로그램코드에서는None이라고 사용
값을반환하지않는함수에의해서반환
생략해도되는인수기본값으로흔히사용
함수안에서호출자쪽에서값을지정하였는지여부확인가능
아무런속성도지니지않으며불리언표현식에서False로평가
25
숫자타입
불리언: True, False두가지값으로표시. 부호를가지지않음
정수: Python3 에서int 형은무제한범위의전체숫자를나타냄
Python2 에서int 형은‑2 ^ 31 ~ 2 ^ 31 ‑ 1 까지표현가능
long형은무제한범위의전체숫자표현가능
부동소수점: 64비트배정밀도로보통17자리정밀도까지표현가능
정밀도를정확하게 제어할필요가 있는경우에는numpy 모듈고려
복소수: 부동소수점수의쌍으로표현
복소수z 의실수부와허수부는z.real과 z.imag로접근
>>> z = 2 + 4j
>>> z.real
2.0
>>> z.imag
4.0
26
순서열타입
순서열은음수가 아닌정수로색인되는순서있는객체들의모음을표현
모든순서열은반복기능을지원
문자열: 문자들의순서열. 변경 불가능
리스트: 임의의파이썬객체들의순서열. 변경 가능
튜플: 임의의파이썬객체들의순서열. 변경 불가능
27
모든순서열에공통적인연산
항목 설명
s[i] 순서열의원소i를반환
s[i:j] 조각을반환
s[i:j:stride] 확장분할에의한조각을반환
len(s) s 에있는원소개수
min(s) s 의최솟값
max(s) s 의최댓값
all(s) s 에있는모든항목이True인지검사
any(s) s 에있는아무항목이나True인지를검사
28
모든순서열에공통적인연산
>>> s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> s[5]
6
>>> s[2:6] # 조각을 반환
[3, 4, 5, 6]
>>> s[1:8:2] # 1에서 8까지 2씩 증가시키면 조각 반환
[2, 4, 6, 8]
>>> len(s)
10
>>> min(s)
1
>>> max(s)
10
>>> sum(s, 0) # s 항목들의 합, 두 번째 인자에 초기값 지정
55
>>> all(s) # s 에 있는 모든 항목이 True 인지 검사
True
>>> any(s) # s 에 있는 아무 항목이나 True 인지 검사
True
29
변경 가능한순서열에적용할수있는연산
항목 설명
s[i] = v 항목대입
s[i:j] = t 조각 대입
s[i:j:stride] 확장분할에의한조각 대입
dels[i] 항목삭제
dels[i:j] 조각 삭제
dels[i:j:stride] 확장분할에의한조각 삭제
30
변경 가능한순서열에적용할수있는연산
>>> s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> s[0] = 42 # 항목 대입
>>> s
[42, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> s[3:6] = [100, 200, 300] # 조각 대입
>>> s
[42, 2, 3, 100, 200, 300, 7, 8, 9, 10]
>>> s[0:5:2] = [20, 40, 60] # 확장 분할 이용 조각 대입
>>> s
[20, 2, 40, 100, 60, 300, 7, 8, 9, 10]
>>> del s[0] # 항목 삭제
>>> s
[2, 40, 100, 60, 300, 7, 8, 9, 10]
>>> del s[0:2] # 조각 삭제
>>> s
[100, 60, 300, 7, 8, 9, 10]
>>> del s[0:7:2] # 확장 분할 이용 조각 삭제
>>> s
[60, 7, 9]
31
리스트
메서드 설명
list(s) s 를리스트로변환
s.append(x) s 의끝에새로운원소x 추가
s.extend(t) s 의끝에새로운리스트t 추가
s.count(x) s 에서x 가 출현한횟수
s.index(x [, start [, stop]]) s[i]==x 인가장작은i반환
s.insert(i, x) 색인i의위치에x 삽입
s.pop([i]) 리스트에서원소i를제거하면서반환
s.remove(x) s 에서x 를찾아서제거
s.reverse() s 의항목들을그 자리에서뒤집음
s.sort([key [, reverse]]) s 의항목들을그 자리에서정렬
32
리스트
내장함수인list(s) 는반복가능한타입을리스트로변환
s 가 이미리스트이면s 의얕은복사본으로새로운리스트생성
s.append(x) 는리스트끝에새로운원소x 추가
s.index(x) 는리스트에서처음으로나타나는x 를검색
x 가 없을경우에는ValueError 예외발생
s.remove(x) 는리스트에서처음으로나타나는x 를제거
x 가 없을경우에는ValueError 예외발생
s.extend(t) 는t 에있는원소를추가해리스트s 확장
s.sort() 는리스트원소를정렬
s 에있는항목은모두동일한타입이여야함
key 함수를지정해비교를수행할때사용할값 지정가능
reverse플래그를지정해역순정렬가능
s.reverse() 는s 의항목들을뒤집어저장 33
리스트메서드실행
>>> s = list((1, 2, 3, 4)) # 튜플을 이용해 리스트 생성
>>> s
[1, 2, 3, 4]
>>> s.append(10) # 리스트 끝에 10 추가
>>> s
[1, 2, 3, 4, 10]
>>> s.extend([20, 30, 40]) # 다른 리스트를 추가해 확장
>>> s
[1, 2, 3, 4, 10, 20, 30, 40]
>>> s.count(10) # s 안에 있는 10 원소 횟수
1
>>> s.index(10) # s 에서 10이 나타나는 위치
4
>>> s.insert(4, 100) # 4번째 위치에 100을 추가
>>> s
[1, 2, 3, 4, 100, 10, 20, 30, 40]
34
리스트메서드실행
>>> s.pop() # 가장 마지막 원소 삭제
40
>>> s
[1, 2, 3, 4, 100, 10, 20, 30]
>>> s.remove(100) # 100 원소를 찾아 삭제
>>> s
[1, 2, 3, 4, 10, 20, 30]
>>> s.reverse() # s 의 항목을 뒤집어 저장
>>> s
[30, 20, 10, 4, 3, 2, 1]
>>> s.sort() # s 의 원소를 오름차순 정렬
>>> s
[1, 2, 3, 4, 10, 20, 30]
35
key 함수를이용한정렬항목지정
>>> student_tuples = [
... ('john', 'A', 15),
... ('jane', 'B', 12),
... ('dave', 'B', 10),
... ]
>>>
>>> # 마지막 숫자를 정렬 항목으로 사용
>>> student_tuples.sort(key=lambda x: x[2])
>>>
>>> student_tuples
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
36
key 함수를이용한정렬항목지정
key 함수지정패턴은자주사용하기 때문에이를위한함수군을제공해줌
>>> student_tuples = [
... ('john', 'A', 15),
... ('jane', 'B', 12),
... ('dave', 'B', 10),
... ]
>>> from operator import itemgetter
>>>
>>> student_tuples.sort(key=itemgetter(2))
>>> student_tuples
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>>
>>> student_tuples.sort(key=itemgetter(1, 2))
>>> student_tuples
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
37
key 함수를이용한정렬항목지정
itemgetter(2) 함수를이용해세번째항목을정렬대상으로지정가능
>>> student_tuples.sort(key=itemgetter(2))
itemgetter(1, 2) 함수를이용해두번째항목으로우선정렬하고, 같은경우에
세번째항목을이용해정렬하도록지정가능
>>> student_tuples.sort(key=itemgetter(1, 2))
38
문자열
파이썬2에는두종류의문자열객체타입이존재
바이트문자열
8비트데이터를담는바이트들의순서열
이진데이터와널바이트저장
유니코드문자열
인코딩되지않은유니코드문자들의순서열
각 유니코드문자는내부적으로16비트정수로표현
16비트정수는65,536 개의고유한문자값 표현가능
유니코드문자열을32비트정수로저장하는것도가능
U+000000 에서U+110000 까지전체범위표현가능
39
문자열메서드
메서드 설명
s.capitalize() 첫번째문자를대문자로변환
s.center(width[, pad])
width길이를가지는필드안에
문자열을가운데정렬
s.count(sub[, start [, end]]) 지정된부분문자열이나타나는횟수
s.decode([encoding[, errors]]) 문자열을디코딩해서유니코드반환
s.encode([encoding[, errors]]) 인코딩된버전의문자열반환
s.endswith(suffix [, start [, end]]) 문자열이suffix로끝나는지를검사
s.expandtabs([tabsize]) 탭을스페이스로대체
40
문자열메서드
메서드 설명
s.find(sub[, start [,end]])
부분문자열이처음으로나타나는위치검색
못찾으면‑1을반환
s.format(*args, **kwargs) s의포맷을지정
s.index(sub[, start [,end]])
부분문자열이처음으로나타나는위치검색
못찾으면예외발생
s.isalnum() 모든문자가 알파벳이나숫자인지를검사
s.isalpha() 모든문자가 알파벳인지를검사
s.isdigit() 모든문자가 숫자인지를검사
s.islower() 모든문자가 소문자인지를검사
41
문자열메서드
메서드 설명
s.isspace() 모든문자가 공백문자인지를검사
s.istitle() 각 단어의첫글자가 대문자인지를검사
s.isupper() 모든문자가 대문자인지를검사
s.join(t)
s를분리자로사용해서순서열t에들어있는
문자열들을이어붙임
s.ljust(width[, fill]) 길이width인문자열에서s를왼쪽정렬
s.lower() 소문자로변경
s.lstrip([chrs]) 앞쪽에있는공백이나chrs로지정된문자들을제거
42
문자열메서드
메서드 설명
s.partition(sep) 문자열sep에기반해서문자열을분할
s.replace(old, new
[,maxreplace])
부분문자열을대체
s.rfind(sub
[,start [,end]])
부분문자열이최종적으로나타난위치검색
s.rindex(sub
[,start [,end]])
부분문자열이최종적으로나타난위치를찾거나
예외를발생
s.rjust(width[, fill]) 길이width인문자열에서s를오른쪽정렬
s.rpartition(sep)
s를분리자sep에기반해서분할
오른쪽끝에서검색시작
43
문자열메서드
메서드 설명
s.rsplit([sep [,maxsplit]])
sep를구분자로사용해서문자열을
끝에서부터분할
s.rstrip([chrs])
끝에나오는공백이나chrs로지정된
문자들을제거
s.split([sep [,maxsplit]]) sep를구분자로사용해문자열분할
s.splitlines([keepends]) 문자열을줄들의리스트로분할
s.startswith(prefix [,start
[,end]])
문자열이prefix로시작하는지검사
s.strip([chrs])
앞이나뒤에나오는공백이나chrs로
지정된문자들을제거
44
문자열메서드
메서드 설명
s.swapcase() 대문자를소문자로, 소문자를대문자로변경
s.title() 제목대소문자형태로된문자열을반환
s.translate(table
[,deletechars])
문자변환표를사용해문자열치환
deletechars에있는문자들은삭제
s.upper() 대문자로변경
s.zfill(width) 문자열을왼쪽에서부터width만큼0으로채움
45
문자열메서드: 새로운문자열생성
>>> s = "hello, world!"
>>> s.capitalize()
'Hello, world!'
>>> s.center(40)
' hello, world! '
>>>
>>> s = "hellotworld!"
>>> s
'hellotworld!'
>>> s.expandtabs(8)
'hello world!'
위메서드는모두원본문자열자체를변경하지않고 새로운문자열을생성
46
문자열메서드: 문자열내부검사
>>> "ABCD".isupper() # 모든 문자열이 대문자인지 검사
True
>>> "abcd1234".isalnum() # 문자열이 알파벳과 숫자로만 이루어졌는지 검사
True
>>> "ABCD".islower() # 모둔 문자열이 소문자인지 검사
False
>>> "".isalnum() # 비어 있는 문자열일 경우에는 False 반환
False
>>> "".isupper() # 비어 있는 문자열일 경우에는 False 반환
False
47
문자열메서드: 검색
find() 메서드는부분문자열을찾지못하면‑1을반환하고
index() 메서드는부분문자열을찾지못하면ValueError 예외발생
>>> s = "hello, world!"
>>> s.find("world") # 지정한 문자열이 처음 나타나는 위치
7
>>> s.find("there") # find() 는 문자열을 찾지 못하면 -1
-1
>>> s.index("world")
7
>>> s.index("there") # index() 는 문자열을 찾지 못하면 예외
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
48
문자열메서드: 검색
>>> s = "hello, world. hello, programmer"
>>> s.find("hello")
0
>>> s.rfind("hello")
14
>>> s.index("hello")
0
>>> s.rindex("hello")
14
>>> s.rfind("there")
-1
>>> s.rindex("there")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
rfind() 와rindex() 는부분문자열을뒤에서검색하여위치를반환
49
문자열메서드: 분리
>>> s = " name email country state city "
>>> s.split()
['name', 'email', 'country', 'state', 'city']
>>> s.rsplit()
['name', 'email', 'country', 'state', 'city']
>>> s.split(None, 3)
['name', 'email', 'country', 'state city ']
>>> s.rsplit(None, 3)
[' name email', 'country', 'state', 'city']
split(), rsplit() 첫번째인자로분리할문자를지정하고
두번째인자로분리할문자열갯수지정
split() 은왼쪽에서분리할문자열을생성하고
rsplit() 은오른쪽에서분리할문자열을생성
50
문자열메서드: 분리
>>> s = "FIELD-VALUE-OPTION"
>>> s.partition("-")
('FIELD', '-', 'VALUE-OPTION')
>>> s.rpartition("-")
('FIELD-VALUE', '-', 'OPTION')
partition(), rpartition() 메서드는분리자부분문자열을검색한후
분리자앞쪽텍스트, 분리자, 그리고 분리자뒤쪽텍스트로분할
partition() 은왼쪽에서처음나오는분리자부분문자열을검색
rpartition() 은오른쪽에서처음나오는분리자부분문자열을검색
51
문자열메서드: 변환(Python2)
>>> from string import maketrans
>>> intab = "aeiou"
>>> outtab = "12345"
>>> transtab = maketrans(intab, outtab)
>>> len(transtab)
256
>>> s = "this is string example"
>>> s.translate(transtab)
'th3s 3s str3ng 2x1mpl2'
translate() 메서드는특정한문자를변환하거나제거하는치환작업에사용
원본문자열과 결과 문자열사이에일대일매핑정보를담은변화표필요
8비트문자열에대해서변환표는256개 문자로된문자열필요
유니코드일경우s[n]이n의유니코드문자에대응하는순서열객체필요
52
문자열메서드: 변환(Python3)
>>> transtab = str.maketrans("aeiou", "12345")
>>> transtab
{97: 49, 101: 50, 105: 51, 111: 52, 117: 53}
>>> s = "this is string example"
>>> s.translate(trans)
'th3s 3s str3ng 2x1mpl2'
Python3 에서바이트문자열을대상으로변환하고 싶다면
bytes.maketrans(), bytes.translate() 메서드이용
53
문자열메서드: 포맷지정
>>> s = "Your name is {0} and your age is {1}"
>>> s.format("Mike", 40)
'Your name is Mike and your age is 40'
>>> s = "Your name is {name} and your age is {age}"
>>> s.format(name="Mike", age=40)
'Your name is Mike and your age is 40'
54
문자열메서드: 포맷지정
>>> s = "Your name is {item[name]} and 
your age is {item[age]}"
>>> person = {"name": "Mike", "age": 40}
>>> s.format(item=person)
'Your name is Mike and your age is 40'
포맷문자열안에있는자리표시자{item} 은간단한색인검색이나
속성검색을포함하는것도가능
{item[n]}: 순서열검색을통해문자열치환
{item[key]}: 사전검색을통해문자열치환
{item.key}: item의속성attr 을이용해문자열치환
55
xrange() 객체(Python2)
xrange(i, j, stride) 함수는범위가 k인(i<= k< j) 정수들을
나타내는객체생성
i, stride는생략가능. 기본값은0, 1
xrange객체는접근될때마다값을계산
range() 함수는순서열객체를생성하지만,
xrange객체는순서열객체가 아님
Python3 에서는xrange이름이range로변경됨
# Python 2
>>> range(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> xrange(1, 10)
xrange(1, 10)
>>> list(xrange(1, 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
56
매핑타입
거의임의적인키값으로색인되는객체를나타냄
순서열과 달리매핑객체는순서를지니지않음
숫자, 문자열및기타다른객체로색인가능
매핑객체는변경 가능
57
사전
사전은유일한내장매핑타입이며해시테이블이나연관 배열의파이썬버전
변경 불가능한객체라면어떤객체든사전의키값으로사용가능
문자열, 숫자, 튜플등사용가능
리스트, 사전, 변경 가능한객체를담은튜플은사용불가
키값의순서를유지하는것이필요할경우에는OrderedDict 사용
58
사전의메서드와연산
메서드 설명
len(m) m에있는항목개수를반환
m[k] 키k로m의항목을반환
m[k]=x m[k]를x로설정
delm[k] m에서m[k]를제거
kinm 키k가 m에있으면True를반환
m.clear( ) m에서모든항목을제거
m.copy( ) m의복사본을생성
59
사전의메서드와연산
메서드 설명
m.fromkeys(s [,value])
순서열s에서키를가져와모든값을value로
설정한새로운사전생성
m.get(k[,v]) m[k]가 있으면m[k]를반환. 아니면v를반환
m.has_key(k) m에키k가 있으면True를반환(Python2)
m.items() m의모든(키, 값) 쌍들로구성되는순서열반환
m.keys() m의모든키들의순서열반환
m.pop(k[,default])
m[k]가 있으면m[k]를반환하고 m에서제거
m[k]가 없을경우default가 제공되면
default를반환. 아니면KeyError
60
사전의메서드와연산
메서드 설명
m.popitem() 임의의(키,값) 쌍을제거하고 이를튜플로반환
m.setdefault(k[, v])
m[k]가 있으면m[k]를반환
없으면, v를반환하고 m[k]를v로설정
m.update(b) b에있는모든객체를m에추가
m.values() m에있는모든값으로구성되는순서열을반환
61
사전의메서드와연산
>>> person = {"name": "Mike", "age": 40}
>>> person["name"]
'Mike'
>>> person["location"] # 키를 못 찾을 경우 KeyError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'location'
>>> person.get("location", "No data") # 못 찾을 경우 기본 값
'No data'
>>> person.update({"location": "Seoul"})
>>> person
{'name': 'Mike', 'age': 40, 'location': 'Seoul'}
>>> len(person)
3
>>> person.pop("location") # 항목 값을 반환하면서 삭제
'Seoul'
>>> person
{'name': 'Mike', 'age': 40}
62
사전의메서드와연산
>>> m = dict.fromkeys(["name", "age"]) # 키를 가져와 생성
>>> m
{'name': None, 'age': None}
>>> m["name"] = "Mike"
>>> m["age"] = 40
>>> n = m.copy() # 매핑 객체에 대한 얕은 복사본
>>> n["name"] = "David"
>>> m
{'name': 'Mike', 'age': 40}
>>> n
{'name': 'David', 'age': 40}
63
사전의메서드와연산
Python3
>>> m = {"name": "Mike", "age": 40}
>>> m.keys()
dict_keys(['name', 'age'])
>>> m.values()
dict_values(['Mike', 40])
>>> m.items()
dict_items([('name', 'Mike'), ('age', 40)])
Python3 에서keys(), values(), items() 메서드결과로
현재내용에대해반복을수행하는반복자를반환
64
사전의메서드와연산
Python2
>>> m = {"name": "Mike", "age": 40}
>>> m.keys()
['age', 'name']
>>> m.values()
[40, 'Mike']
>>> m.items()
[('age', 40), ('name', 'Mike')]
Python2 에서keys(), values(), items() 메서드결과로
실제내용을담고 있는리스트를반환
65
집합타입
고유한항목들의순서없는모음
순서열과는달리집합은색인및분할연산지원안함
객체에연관된키가 없음
집합에들어있는항목들은변경이불가능해야함
set: 변경이가능한집합
frozenset: 변경이불가능한집합
>>> s = set([1, 10, 20, 30])
>>> f = frozenset(['a', 1, 'hello', 42])
>>> s
{1, 10, 20, 30}
>>> f
frozenset({1, 42, 'a', 'hello'})
66
집합타입메서드와연산
메서드 설명
len(s) s에있는항목의개수
s.copy() s의복사본을생성
s.difference(t) 차집합. s에는있지만t에는없는모든항목을반환
s.intersection(t) 교집합. s와t에둘다들어있는모든항목을반환
s.isdisjoint(t)
s와t에공통으로들어있는항목이없을경우
True를반환
67
집합타입메서드와연산
메서드 설명
s.issubset(t) s가 t의부분집합인경우True를반환
s.issuperset(t) s가 t의포함집합인경우True를반환
s.symmetric_difference(t)
대칭차집합. s나t에들어있지만
둘모두에는들어있지않은모든항목반환
s.union(t) 합집합. s나t에있는모든항목을반환
68
집합타입메서드와연산
>>> a = {1, 3, 5, 7}
>>> b = {1, 2, 4, 6}
>>> len(a)
4
>>> a.difference(b) # 집합 연산 a - b
{3, 5, 7}
>>> a.intersection(b) # 집합 연산 a ∩ b
{1}
>>> a.union(b) # 집합 연산 a ∪ b
{1, 2, 3, 4, 5, 6, 7}
>>> a.symmetric_difference(b) # 집합 연산 a ∪ b - (a ∩ b)
{2, 3, 4, 5, 6, 7}
69
집합타입메서드와연산
>>> a = {1, 3, 5}
>>> b = {1, 3, 5, 7, 9}
>>> a.issubset(b) # a ⊂ b
True
>>> b.issuperset(a) # a ⊂ b
True
>>> a.isdisjoint(b) # a ∩ b is ∅ ?
False
>>> a = {1, 3, 5}
>>> b = {2, 4, 6}
>>> a.isdisjoint(b) # a ∩ b is ∅ ?
True
70
집합타입메서드와연산
변경 가능한집합에사용가능한메서드
메서드 설명
s.add(item)
item을s에추가
이미item이s에있으면아무런효과 없음
s.clear() s에서모든항목을제거
s.difference_update(t) s에서t에있는모든항목을제거
s.discard(item)
s에서item을제거
s에item이없는경우아무런변화없음
71
집합타입메서드와연산
변경 가능한집합에사용가능한메서드
메서드 설명
s.intersection_update(t)
s와t의교집합을구하고
결과를s에남겨둠
s.pop( )
s에서아무원소나반환하는
동시에s에서제거
s.remove(item)
s에서item을제거한다.
item이없으면KeyError 예외
s.symmetric_difference_update(t)
s와t의대칭차집합을구하고
결과를s에남겨둠
s.update(t) t의모든항목을s에추가
72
집합타입메서드와연산
변경 가능한집합에사용가능한메서드
>>> a = {1, 3, 5}
>>> b = {2, 3, 5, 7}
>>> a.add(9) # a 집합에 항목 추가
>>> a
{1, 3, 5, 9}
>>> a.difference_update(b) # a := a - b
>>> a
{1, 9}
>>> c = {1, 10}
>>> a.intersection_update(c) # a := a ∩ c
>>> a
{1}
73
집합타입메서드와연산
변경 가능한집합에사용가능한메서드
>>> a = {1, 3, 5, 7}
>>> a.update({1, 1, 3, 3, 5, 9})
>>> a
{1, 3, 5, 7, 9}
>>> a.pop() # 원소를 반환하면서 집합에서 제거
1
>>> a.pop()
3
>>> a
{5, 7, 9}
>>> a.remove(10) # 없는 값을 지정할 경우 KeyError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 10
>>> a.discard(10) # 없는 값을 지정할 경우 무시
74
프로그램구조를나타내는내장타입
파이썬에서함수, 클래스, 모듈은모두데이터로서다루어질수있는객체
타입분류 타입이름 설명
호출가능
(callable)
types.BuiltinFunctionType 내장함수나메서드
type 내장타입과 클래스의타입
object 모든타입과 클래스의조상
types.FunctionType 사용자정의함수
types.MethodType 클래스메서드
75
프로그램구조를나타내는내장타입
타입분류 타입이름 설명
모듈 types.ModuleType 모듈
클래스 object 모든타입과 클래스의조상
타입 type 내장타입과 클래스의타입
object 와type은두번씩나와있는데
클래스와타입의경우모두함수로서호출될수있기 때문
76
호출가능타입
호출가능(callable) 타입은함수호출연산을지원하는객체
사용자정의함수
내장함수
인스턴스메서드
클래스
77
사용자정의함수
사용자정의함수(user‑definedfunction)는모듈수준에서
def문이나lambda연산자로생성되는호출가능객체
>>> def foo(x, y):
... return x + y
...
>>> bar = lambda x, y: x + y
78
사용자정의함수
사용자정의함수는다음속성을가짐
속성 설명
f.__doc__ 문서화문자열
f.__name__ 함수이름
f.__dict__ 함수속성을담은사전
f.__code__ 바이트컴파일된코드
f.__defaults__ 기본인수들을담는튜플
f.__globals__ 전역네임스페이스를나타내는사전
f.__closure__ 중첩된유효범위와관련된데이터를담은튜플
79
메서드
메서드(method)는클래서안에서정의되는함수
인스턴스메서드
클래스메서드
정적메서드
class Foo(object):
def instance_method(self, arg):
print("instance_method: ", arg)
@classmethod
def class_method(cls, arg):
print("class_method: ", arg)
@staticmethod
def static_method(arg):
print("static_method: ", arg)
80
메서드
인스턴스메서드(instancemethod)는주어진클래스에속한
인스턴스에대해수행되는메서드
첫번째인수로인스턴스전달(관례에따라self)
클래스메서드(class method)는클래스자체를객체로보고
여기에대해수행되는메서드
첫번째인수cls 로클래스객체전달
정적메서드(staticmethod)는클래스안에함께묶인함수
첫번째인수로인스턴스나클래스객체를받지않음
81
메서드
인스턴스메서드와클래스메서드는모두타입이
types.MethodType객체로표현
메서드를호출할때찾는연산과 호출하는연산이모두발생하지만
무언가를찾는연산은함수를호출하는연산과 별개로수행
82
메서드
>>> f = Foo()
>>> meth = f.instance_method
>>> meth(42)
instance_method: 42
위코드에서meth를묶인메서드(boundmethod)라고 부름
메서드와메서드에연관된인스턴스둘다를감싸는호출가능객체
묶인메서드를호출하면인스턴스가 첫번째인수(self)로전달
83
메서드
클래스자체에대해서메서드검색을수행하는것도가능
>>> umeth = Foo.instance_method
>>> umeth(f, 37) # self 를 직접 전달하면서 호출
instance_method: 37
위코드에서umeth를안묶인메서드(unboundmethod)라고 부름
메서드함수를감싸고 인스턴스는첫번째인수로넘어올것을기대
엉뚱한타입객체를전달하면TypeError 발생(Python2)
84
메서드
사용자정의클래스에대해묶인메서드와안묶인메서드는모두
타입이types.MethodType인객체로표현
메서드객체속성
속성 설명
m.__doc__ 문서화문자열
m.__name__ 메서드이름
m.__class__ 이메서드가 정의되어있는클래스
m.__func__ 메서드를구현하는함수객체
m.__self__ 메서드와연결되어있는인스턴스
85
내장함수와메서드
types.BuiltinFunctionType객체는C 와C++ 로구현된
내장함수와메서드를나타냄
내장함수속성목록
속성 설명
b.__doc__ 문서화문자열
b.__name__ 함수나메서드이름
b.__self__ 메서드와연결된인스턴스(묶인메서드일경우)
len() 같은내장함수는__self__ 값이None이며
어떤객체에도묶여있지않음
x 가 리스트일때x.append같은내장메서드의__self__ 는x 로설정
86
호출가능한클래스와인스턴스
클래스객체와인스턴스는호출가능한객체로도동작
클래스객체
클래스객체는class 문에의해생성
클래스객체가 호출될때인수들은__init__() 메서드에전달
__init__() 메서드에전달된인수를이용해인스턴스를초기화
인스턴스
__call()__ 을정의하여함수를흉내내는것 가능
인스턴스x 에대해이메서드가 정의되어있으면x(args)를통해
x.__call__(args) 호출가능
87
클래스, 타입, 인스턴스
클래스를정의하면일반적으로타입이type인객체생성
>>> class Foo(object):
... pass
...
>>> type(Foo)
<class 'type'>
88
클래스, 타입, 인스턴스
타입객체t 에대해서자주사용되는속성목록
속성 설명
t.__doc__ 문서화문자열
t.__name__ 클래스이름
t.__bases__ 기반클래스들로구성되는튜플
t.__dict__ 클래스메서드와변수들을담은사전
t.__module__ 클래스가 정의되어있는모듈의이름
t.__abstractmethods__ 추상메서드이름들의집합
89
클래스, 타입, 인스턴스
어떤객체의인스턴스가 생성되면이인스턴스의타입은
인스턴스를정의하는클래스가 됨
>>> f = Foo()
>>> type(f)
<class '__main__.Foo'>
인스턴스i의특수한속성목록
속성 설명
i.__class__ 인스턴스가 속하는클래스
i.__dict__ 인스턴스데이터를담은사전
90
모듈
모듈(module) 타입은import 문으로로드되는객체들을담는컨테이너
import foo문을실행하면대응되는모듈객체에이름foo가 할당됨
모듈은속성__dict__ 로접근할수있는사전을통해서네임스페이스정의
>>> import foo
>>> foo.__name__
'foo'
>>> foo.x
42
>>> foo.__dict__["x"]
42
91
모듈
모듈이가진속성목록
속성 설명
m.__dict__ 모듈과 연결된사전
m.__doc__ 모듈의문서화문자열
m.__name__ 모듈의이름
m.__file__ 모듈이로드된파일
m.__path__
패키지전체경로
모듈객체가 패키지를참조할경우에만정의됨
92
객체의작동방식과 특수메서드
모든기본적인인터프리터연산은특수한객체메서드에의해구현됨
메서드들의이름은이중밑줄(__)로시작해서이중밑줄로끝남
프로그램이실행됨에따라인터프리터에의해자동으로호출
>>> x = 10
>>> y = 20
>>> x + y
30
>>> x.__add__(y)
30
>>> s = [1, 2, 3]
>>> s[0]
1
>>> s.__getitem__(0)
1
각 데이터타입의작동방식은그 타입이구현하고 있는
특수메서드집합에따라결정 93
객체생성및파괴
객체생성과 파괴를위한특수메서드
메서드 설명
__new__(cls [, *args [, **kwargs]])
새인스턴스를생성하기 위해
호출되는클래스메서드
__init__(self[, *args [, **kwargs]]) 새인스턴스를초기화할때호출
__del__(self) 인스턴스가 파괴될때호출
delx 문은객체의참조횟수를감소시킬뿐
반드시__del__() 함수호출로이어지지는않음
94
객체생성및파괴
__new__(), __init__() 메서드는새인스턴스생성후초기화하는데사용
>>> class Foo(object):
... def __init__(self):
... pass
...
>>> x = Foo.__new__(Foo)
>>> x.__init__()
>>> type(x)
<class '__main__.Foo'>
__new__() 는보통변경 불가능한타입중하나로부터상속을받은
사용자정의객체나메타클래스에서주로사용
__del__() 는자원관리문제를다루어야하는상황에서주로사용
95
객체의문자열표현
객체표현을위한특수메서드
메서드 설명
__format__(self, format_spec) 포맷이적용된표현을생성
__repr__(self) 객체의문자열표현을생성
__str__(self) 객체의간단한문자열표현을생성
96
객체의문자열표현
__repr__() 메서드
평가될경우객체를재생성하는표현식문자열반환
대화형인터프리터에서변수를살펴볼때보여주는출력값
문자열표현식을생성할수없는경우에는<...메시지...>
형태의문자열을반환하는것이관례
>>> a = [1, 2, 3, 4]
>>> s = repr(a)
>>> s
'[1, 2, 3, 4]'
>>> b = eval(s)
>>> b
[1, 2, 3, 4]
>>>
>>> f = open('sample.txt', 'w')
>>> a = repr(f)
>>> a
"<_io.TextIOWrapper name='sample.txt' mode='w' encoding='UTF-8'
97
객체의문자열표현
__str__() 메서드
내장함수str() 또는출력과 관련된함수에의해서호출
__str__() 은__repr__() 에비해서더간결한문자열반환
__str__() 이정의되어있지않으면__repr__() 가 대신호출
__format__() 메서드
format() 함수또는문자열의format() 메서드에의해호출
>>> format(12300.345678, ".2f")
'12300.35'
>>> "{0:.2f}".format(12300.345678)
'12300.35'
>>> format(255, "x")
'ff'
>>> "{0:x}".format(255)
'ff'
98
객체비교와순서매기기
객체검사및해싱을위한특수메서드
메서드 설명
__bool__(self) 진리값 검사를위해False나True를반환
__hash__(self) 정수해시색인을계산
__bool__()
진리값 검사를수행하는데사용
메서드가 정의되어있지않을경우에는__len__() 메서드사용
99
객체비교와순서매기기
__hash__()
사전에서키로쓰일수있는객체에서정의필요
동일한두객체에대해서동일한값을갖는정수반환
변경 가능한객체에서는메서드를정의하면안됨
객체에변경이가해지면해시값이변경되어검색불가
>>> s = "hello"
>>> s.__hash__()
-3744210719992765910
>>> s = "world"
>>> s.__hash__()
-2831968778691815178
100
객체비교와순서매기기
객체는하나이상의관계 연산자를구현하는것이가능
각 메서드는두개의인수를받아어떤종류의객체든반환가능
메서드 설명
__lt__(self,other) self< other
__le__(self,other) self≤ other
__gt__(self,other) self> other
__ge__(self,other) self≥ other
__eq__(self,other) self== other
__ne__(self,other) self!= other
== 로비교하거나사전키로사용하려면__eq__() 메서드구현
객체를정렬하거나min(), max() 를사용하려면__lt()__ 메서드구현
101
순서열및매핑메서드
순서열과 매핑을위한메서드목록
메서드 설명
__len__(self) self의길이반환
__getitem__(self, key) self[key] 반환
__setitem__(self, key, value) self[key] = value반환
__delitem__(self, key) self[key] 삭제
__contains__(self,obj)
obj가 self에있으면True를반환
아닐경우False를반환
102
순서열및매핑메서드
순서열이나매핑객체를흉내내기 원하는객체에서사용
>>> a = [1, 2, 3, 4, 5]
>>> len(a)
5
>>> a.__len__()
5
>>> a.__getitem__(2) # 순서열에 대해서는 보통 정수 사용
3
>>> a.__delitem__(3)
>>> a
[1, 2, 3, 5]
>>> 5 in a
True
>>> a.__contains__(1)
True
103
순서열및매핑메서드
x = s[i:j] 같은분할연산을구현할때에는slice객체이용
>>> a = [1, 2, 3, 4, 5, 6]
>>> a[1:5]
[2, 3, 4, 5]
>>> a.__getitem__(slice(1, 5, None))
[2, 3, 4, 5]
>>> a[1:3] = [10, 11]
>>> a
[1, 10, 11, 4, 5, 6]
>>> a.__setitem__(slice(1, 3, None), [20, 21])
>>> a
[1, 20, 21, 4, 5, 6]
>>> a.__delitem__(slice(1, 3, None)) # del a[1:3]
>>> a
[1, 4, 5, 6]
104
반복
객체가 반복을지원하고자하면반복자객체를반환하는
obj.__iter__() 메서드를구현하는것이필요
반복자iter 는iter.__next__() 메서드를구현해야함(Python2: iter.next())
>>> s = [1, 2, 3, 4]
>>> for x in s:
... print(x)
...
>>> _iter = s.__iter__()
>>> while True:
... try:
... x = _iter.__next__()
... except StopIteration:
... break
... print(x)
...
1
2
3
4
105
호출가능인터페이스
객체는__call__(self[, *args [, **kwargs]]) 메서드를제공해
함수처럼호출하는것이가능
x(arg1, arg2, ...) ‑> x.__call__(self, arg1, arg2, ...)
함수를흉내내는객체는함수기(functor), 대리자(proxy)를생성하는데유용
>>> class DistanceFrom(object):
... def __init__(self, origin):
... self.origin = origin
... def __call__(self, x):
... return abs(x - self.origin)
...
>>> nums = [20, 40, 0, -10, 10, 42]
>>> nums.sort(key=DistanceFrom(10))
>>> nums
[10, 20, 0, -10, 40, 42]
106
컨텍스트관리프로토콜
with문은컨텍스트관리자(context manager)라고 부르는객체제어하에서
일련의문장들을실행하는데사용
with context [as var]:
문장들
파일이나네트워크연결, 락같은시스템자원을with문안에서사용하고
빠져나올때자동으로해제하는형태로사용
>>> with open("sample.txt", "w") as f:
... f.write("Hello, World!")
...
13
>>> open("sample.txt").read()
'Hello, World!'
107
컨텍스트관리프로토콜
컨텍스트관리자를위한특수메서드
메서드 설명
__enter__(self)
새로운컨텍스트에들어설때호출
반환되는값은as 로지정된변수에저장
__exit__(self, type, value, tb)
컨텍스트를벗어날때호출
예외가 발생되었으면type, value, tb는
예외타입, 값, 역추적정보를담고 있음
108

Contenu connexe

Tendances

파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
Yong Joon Moon
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
Yong Joon Moon
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
SeongHyun Ahn
 

Tendances (20)

파이썬 유용한 라이브러리
파이썬 유용한 라이브러리파이썬 유용한 라이브러리
파이썬 유용한 라이브러리
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기
 
R 스터디 두번째
R 스터디 두번째R 스터디 두번째
R 스터디 두번째
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612
 
파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 

En vedette

Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...
Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...
Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...
paperpublications3
 

En vedette (15)

Treatment of Domestic Wastewater Using Chemical Coagulation Followed by Geote...
Treatment of Domestic Wastewater Using Chemical Coagulation Followed by Geote...Treatment of Domestic Wastewater Using Chemical Coagulation Followed by Geote...
Treatment of Domestic Wastewater Using Chemical Coagulation Followed by Geote...
 
Tiger Balm History and Lim Chin Tsong Palace ခ်င္ေခ်ာင္းနန္းေတာ္ History
Tiger Balm History and Lim Chin Tsong Palace ခ်င္ေခ်ာင္းနန္းေတာ္ HistoryTiger Balm History and Lim Chin Tsong Palace ခ်င္ေခ်ာင္းနန္းေတာ္ History
Tiger Balm History and Lim Chin Tsong Palace ခ်င္ေခ်ာင္းနန္းေတာ္ History
 
Flors
FlorsFlors
Flors
 
Праздник, посвященный Дню защитника Отечества
Праздник, посвященный Дню защитника ОтечестваПраздник, посвященный Дню защитника Отечества
Праздник, посвященный Дню защитника Отечества
 
Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...
Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...
Characterization and Validation of Point Mutation in Breast Cancer 1 (BRCA1) ...
 
How do you envision the city of the future?
How do you envision the city of the future?How do you envision the city of the future?
How do you envision the city of the future?
 
Praparacion de muestras histologia
Praparacion de muestras histologiaPraparacion de muestras histologia
Praparacion de muestras histologia
 
Ilhabela 1200861022919787-4
Ilhabela 1200861022919787-4Ilhabela 1200861022919787-4
Ilhabela 1200861022919787-4
 
Initial film poster ideas
Initial film poster ideasInitial film poster ideas
Initial film poster ideas
 
Ensayo sociologia desviacion social
Ensayo sociologia desviacion socialEnsayo sociologia desviacion social
Ensayo sociologia desviacion social
 
Cr final apresentação_ilda_bicacro_espanha_sc
Cr final apresentação_ilda_bicacro_espanha_scCr final apresentação_ilda_bicacro_espanha_sc
Cr final apresentação_ilda_bicacro_espanha_sc
 
Guias de dermatitis atopica
Guias de dermatitis atopicaGuias de dermatitis atopica
Guias de dermatitis atopica
 
Overview of Microsoft Azure AI Services
Overview of Microsoft Azure AI ServicesOverview of Microsoft Azure AI Services
Overview of Microsoft Azure AI Services
 
The Superhero’s Journey - Transformative Endeavors
The Superhero’s Journey - Transformative EndeavorsThe Superhero’s Journey - Transformative Endeavors
The Superhero’s Journey - Transformative Endeavors
 
Act 8. tallerpractico10 98620568
Act 8. tallerpractico10  98620568Act 8. tallerpractico10  98620568
Act 8. tallerpractico10 98620568
 

Similaire à Python Programming: Type and Object

12 1. multi-dimensional array
12 1. multi-dimensional array12 1. multi-dimensional array
12 1. multi-dimensional array
웅식 전
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약
Sung Yub Kim
 

Similaire à Python Programming: Type and Object (20)

R intro
R introR intro
R intro
 
강의자료3
강의자료3강의자료3
강의자료3
 
12 1. multi-dimensional array
12 1. multi-dimensional array12 1. multi-dimensional array
12 1. multi-dimensional array
 
Python datatype
Python datatypePython datatype
Python datatype
 
2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3
 
Java mentoring of samsung scsc 0
Java mentoring of samsung scsc   0Java mentoring of samsung scsc   0
Java mentoring of samsung scsc 0
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: Function
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
하스켈 프로그래밍 입문
하스켈 프로그래밍 입문하스켈 프로그래밍 입문
하스켈 프로그래밍 입문
 
하스켈 프로그래밍 입문 2
하스켈 프로그래밍 입문 2하스켈 프로그래밍 입문 2
하스켈 프로그래밍 입문 2
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
고등학생 R&E Python summary for test
고등학생 R&E Python summary for test고등학생 R&E Python summary for test
고등학생 R&E Python summary for test
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약
 
텐서플로우-기초 프로그래밍
텐서플로우-기초 프로그래밍텐서플로우-기초 프로그래밍
텐서플로우-기초 프로그래밍
 
Python 스터디
Python 스터디Python 스터디
Python 스터디
 
7주차 스터디
7주차 스터디7주차 스터디
7주차 스터디
 
Ruby 2 array_hash
Ruby 2 array_hashRuby 2 array_hash
Ruby 2 array_hash
 
3.포인터
3.포인터3.포인터
3.포인터
 
5장 객체와클래스
5장 객체와클래스5장 객체와클래스
5장 객체와클래스
 

Plus de Chan Shik Lim

Plus de Chan Shik Lim (9)

FPV Streaming Server with ffmpeg
FPV Streaming Server with ffmpegFPV Streaming Server with ffmpeg
FPV Streaming Server with ffmpeg
 
Improving monitoring systems Interoperability with OpenMetrics
Improving monitoring systems Interoperability with OpenMetricsImproving monitoring systems Interoperability with OpenMetrics
Improving monitoring systems Interoperability with OpenMetrics
 
pgday.seoul 2019: TimescaleDB
pgday.seoul 2019: TimescaleDBpgday.seoul 2019: TimescaleDB
pgday.seoul 2019: TimescaleDB
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical Guide
 
Kubernetes on Premise
Kubernetes on PremiseKubernetes on Premise
Kubernetes on Premise
 
Hadoop High Availability Summary
Hadoop High Availability SummaryHadoop High Availability Summary
Hadoop High Availability Summary
 
Python Programming: Tuning and Optimization
Python Programming: Tuning and OptimizationPython Programming: Tuning and Optimization
Python Programming: Tuning and Optimization
 
Python Programming: Data Structure
Python Programming: Data StructurePython Programming: Data Structure
Python Programming: Data Structure
 
Python Programming: Class and Object Oriented Programming
Python Programming: Class and Object Oriented ProgrammingPython Programming: Class and Object Oriented Programming
Python Programming: Class and Object Oriented Programming
 

Python Programming: Type and Object