0803_py
python data structure
Tuple
튜플을 왜 쓸까?
변경되지 않는 데이터의 저장.
값이 1개인 tuple은 ,을 붙여야 함. , 없으면 정수로 인식함.
t = (12,)
set
set 함수
s.add(arg)
s.remove(arg)
s.update(list_arg)# adds all list elements
s.discard(arg)# remove arg
s.clear()
s1 = set([...])
s2 = set([...])
s1.union(s2)
s1 | s2
s1.intersection(s2)
s1 & s2
s1.difference(s2)
s1 - s2
deque
list에 비해 빠르다.
from collections import deque
dq = deque()
dq.append(arg)
dq.appendleft(arg)
dq.rotate(arg)
dq(arg_list)
dq.extnd(arg_list)
dq.extendleft(arg_list)
뭘로 만들었지? priorty que? heap? circular que? time complexity?
OrderedDict
3.6이전에는 dict가 넣은 순서 기억 못했음(멍청…) OrderedDict을 쓰면 기억 했음
근데 지금은 그냥 dict도 다 됨…
노쓸모?
Counter
from collections import Counter
c = Counter(...)
d = Counter(...)
c + d
c & d
c | d
Couter(str_list_arg)[str_arg]
#str_list_arg의 각 elem의 빈도를 카운드.
#str_arg string으 빈도수 반환
namedtuple
쉽게 말해 다른 언어의 class/struct 와 유사 일반적인 class convention으로 대문자로 시작. PEP 8 – Style Guide for Python Code도 마찬가지로 대문자 컨벤션 유지 함.
from collections import namedtuple
#define
ClassName = namedtuple('ClassName', ['prop1', 'prop2'])
c = ClassName('prop1' = 9, 'prop2' = 1)
# 일반적인 class 객체 생성과 유사.
c.prop1 + c.prop2
x, y = c
#x = c.prop1, y = c.prop2
3-2 pythonic code
list comprehension: nested for loop
twoComp = [i + j for i in (...) for j in (...)]
twoCompWithCond = [i + j for i in (...) for j in (...) if (i...j)]
twoCompWithTwoCond = [i + j if (i...j) else (i...j) for i in (...) for j in (...)]
[i+j for i in case_1 for j in case_2]
# [ i+j ] for each i and j.
[ [i+j for i in case_1] for j in case_2]
# [ [i+j ... ] j times] for each j
zip
병렬적으로 iterator을 추출함.
# with list
for a, b in zip(alist, blist):
...
# with tuple
for x in zip(t1, t2, t3):
...
# x : each tuple same index
for i, (a, b) in enumerate(zip(alist, blist)):
# 병렬적으로 1개씩 iterator 뽑는다.
# i : 동일한 index
# a, b each element
map & lambda & reduce
map
list(map(lambda x: ..., arg_list))
python3에서는 map 결과로 iterator을 반환해서 list을 붙여야 함.
reduce
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
map과 reduce을 합치면 그 map reduce가 됨!(…)
Iterator
it = iter(list_arg) # prior iterator
next(it) # first element iterator with index 0.
Generator
element가 사용되는 시점에 값을 메모리에 반환 [ ] 대신 ( ) 를 사용하여 표현 일반적인 iterator는 generator에 반해 훨씬 큰 메모리 용량 사용
- list 타입의 데이터를 반환해주는 함수는 generator로 만들어라! : 읽기 쉬운 장점, 중간 과정에서 loop 이 중단될 수 있을 때!
- 큰 데이터를 처리할 때는 generator expression을 고려하라! : 데이터가 커도 처리의 어려움이 없음
- 파일 데이터를 처리할 때도 generator를 쓰자…
더 검색해보기…
4-1 OODP
class
클래스 선언할 때 argument는 파이썬 object 객체 class SoccerPlayer(object)
python str
java에서 toString함수와 같은 역할처럼 보인다. 모든 객체에 상속되어서 instance 생성해서 print하면 standard output으로 찍힘.
class Player(object):
def __str__(self):
return "Hello, class prop1 = %s, prop2 = %s" %(self.prop1, self.prop2)
p = Player(prop1, prop2)
print(p) # Hello...
상속
class Person(object):
def __init__(self, name, age)
...
...
class Korean(Person):
def __init__(self, name, age, newProp1, ...)
super().__init__(name, age)
newProp1 = newProp1
...
#overwrite
def parMethod(self):
super().parMethod()
...
# new method
def ownMethod(self):
...
ko = Korean("name", age)
Korean -> Person
Visibility class ClassName(object): def init(self): self.__prop = … # private 선언이 default인듯? # get method와 이름 충돌 방지 위해 underbar
# get method?가 아닌 property 바로 꺼내 씀.
# public ? protected?
@property
def prop(self):
return self.__prop
val = ClassNAme.prop # 꺼내서 씀. method로 호출 안한것에 유의.
customizing도 가능!
@property
def prop(self):
return self.prop1 + "additional str" + self.prop2
함수형 언어로써의 파이썬 함수 object 다른 변수에 할당
def func(x):
...
return ...
f = func
f(arg)
function pointer 처럼 쓰기
def func1(x):
...
return ...
def func2(x):
...
return ...
#func pointer
def fPointer(funcs, target_arg):
return ...
fPointer(func1, arg)
fPointer(func2, arg)
4-2 module
__init__.py
class의 __init__
constructor와 유사. 대신 역할이 python file object을 생성하는 것? python이 __init__
이 있으면 해당 directory을 모듈로 인식. import 해서 안의 파일, class, …, objects을 불러올 수 있음.
__init__
에서 다른 모듈로부터 object으로 import될 수 있는 object들만을 명시할 수도 있음. e.g. 특정 py의 특정 method. 혹은 특정 py들 전체. 혹은 모두 다!
- 아무 것도 없으면 모두 다 import 가능
- 특정 py들만
__all__ = [...py, ....py, ...]
- 특정 py의 특정 함수만
from file_name import method
Reference: https://careerkarma.com/blog/what-is-init-py/
Comments