본문 바로가기

Language

(22)
RePythonOOP 12일차 Python Hash_table in Dictionary Structure, Dictionary Comprehension, Dictionary_Inheritance in Class Insight 1. 해시 태이블 사용한다 == 해시 테이블 내부는 딕셔너리 구조다 -> 코드에 딕셔너리는 mutable하다. 햇갈리지 말자 2. mutable한 자료형이면 해시 테이블을 사용하지 않는 자료구조이다 3. 결국 이걸 따지는 것은 Immutable한 자료가 성능 향상에 좋다. 4. 딕셔너리의 키 벨류 체이닝에 대해 여러 풀이 방법을 생각해 보았다. 5. 딕셔너리를 실제 클래스로 상속 받아서 구현함으로 딕셔너리 내부를 재대로 이해하게 되었다. Hash_table in Dictionary Structure 파이썬의 핵심엔진은 딕셔너리 형태로 이루어져 있다. 파이썬은 이 딕셔너리의 해시테이블(hashtable)을 사용 -> 해시 태이블내 해시값(숫자)로 같은지 아닌지 판별 -> 적은 리소스로 많은 ..
RePythonOOP 11일차 Python Packing VS Unpacking, Mutable(가변) VS Immutable(불변), sort() VS sorted() Insight 1. '모든 것이 객체이다.' == '순수 객체지향 언어이다'. 가 같은 말이라는 것을 알게 되었다. 2. 패킹과 언패킹으로 인자를 전달하고 값을 할당하는 것을 알게 되었다. 3. mutable과 immutable에 있는 call by ~~~~ 들을 구분하여 말할 수 있다. 4. sort와 sorted 가 본인 스스로 자주 사용해 왔엇는데 조금 더 자세히 들여다 보았다. Tuple Packing VS Unpacking 패킹 : 여러개의 객체를 묶어서 자료형으로 선언 해 주는 것이다. 언패킹 : 여려개의 객체가 들어 간 자료 형을 *로 풀어주는 것이다. (가변 파라미터 *,키워드 파라미터 ** 의 개념과 같다) 예를 들어보자. divmod(a,b) a를 b로 나누는 함수이고 결과는 몫과 나머..
RePythonOOP 10일차 파이썬 tuple comprehension, array comprehension Insight 1. 튜플 컴프리핸션이라고 무턱대고 ()를 사용하면 안된다. 2. 어레이를 왜 쓰는지 리스트와 어레이 사이에서 고민한다면 어떤 기준점을 잡을지 알게 되었다. 3. 리스트(가변형)를 사용시 연산자로 처리할때 의도치 않게 얕은 복사가 생길 수 있어 값이 한꺼번에 변동될 수 있음을 조심하자. 튜플 컴프리핸션 (지능형 튜플)을 만들어 보자 일반적으로 튜플 컴프리 핸션은 리스트 컴프리 핸션 거의 같다. 하지만 아래와 같은 우를 범할 때가 있다. # 제너레이터 생성 예제 tuple_ = (i for i in range(10)) print(type(tuple_)) # 제너레이터가 나온다? print(tuple_) # # Generator : 한 번에 한 개의 항목을 생성하므로 메모리에서 데이터를 유지하..
RePythonOOP 9일차 파이썬 컨테이너 VS 플랫, 가변 VS 불변, 리스트 컴프리 핸션 Insight 1. 리스트내에 for문을 통한 값 할당시 무조건 (지능형) 리스트 컴프리 핸션이 빠르다. 2. 가변 불변, 컨테이너, 플랫은 자주 보면서 외우려고 마음을 먹었다. (중요하고 나중에 다시 찾아 볼거 같아서) 3. 성능이 빠른 것도 중요하지만 때로는 상황에 맞게 코딩하는 여러 구현 방법들을 살펴 보았다. 시퀸스형(순서,순차)에서의 구분 서로 다른 자료형(container)을 담을수 있는 객체 tuple , list , collections.deque 하나의 자료형(flat)만을 담을수 있는 객체 str,bytes,bytearray,array.array, memoryview 가변(mutable)적인 객체 list, bytearray, array.array, memoryview, deque 불변..
RePythonOOP 8일차 매직메소드 오버라이딩 심화 (+ bool()) Insight 1. 코딩을 할때 명확한 나의 의도대로 동작하지 않을 때가 있다. 내가 부딫힌 부분은 bool()함수 였다. 2. 시야를 넗게, 여러 가능성을 두고 확장하는 것이 soft skill을 늘릴 수 있다는 것을 깨달았다. 3. class내 init을 분기해 메소드 오버 로딩(같은 메서드 이름 , 다른 파라미터를 받을 수 있는 개념)처럼 꾸밀수 있다. init에 분기되는 x,y를 담는 속성과 과 repr로 출력하는 매직메서드를 생성합니다. init에 분기문은 오버 로딩 처럼 구현해 보겠습니다. (JAVA처럼 파이썬에서는 지원하지 못합니다) 추가로 파이썬의 object를 상속하는 함수를 만들어 보겠습니다. class XY(object): def __init__(self, *args): '''init..
RePythonOOP 7일차 매직메소드 오버라이딩 Insight 1.파이썬이 객채 생성시 매직메소드로 미리 함수적인 기능들은 만들어 준다 2.뭔가 내장 함수 명령어가 안된다면(대게 코더~ 잘못) I/O와 dir()함수로 보고 그에 맞게 코딩해주면 된다. 3.필요한 기능을 매직 메소드로 오버 라이딩하여 고칠 수 있다. 4. 메소드 오버로딩은 디폴드 값 사용, 가변또는 키워드인자로 만 사용 가능하다. 5. 코딩을 할 시 기능적 제약이 있으면 본인이 기능을 만들면서 고칠수 있다. 사전 지식 1.데이터의 모든 자료형은 클래스이다! print(int) # print(str) # 더 이상 안쳐도 되겠지만 항상 class를 출력합니다. 그래서 위의 말을 증명 할 수 있습니다. 모든 속성 및 메소드는 dir() 함수로 확인이 가능합니다. dictionary라고 이 참..
RePythonOOP 6일차 네임드 튜플 클래스 응용 해 보기 네임드 튜플을 응용하여 학교의 반, 학생정보를 가지는 클래스를 선언 해보겠습니다. 반마다 20명의 인원 , 4개의 ABCD반이 있고 A반 1~20명, B반 1~20명 ... 있는 구조입니다. 전체 코드입니다. from collections import namedtuple Classes = namedtuple('Classes', ['rank', 'number']) numbers = [str(n) for n in range(1, 21)] ranks = 'A B C D'.split() students = [Classes(rank, number) for rank in ranks for number in numbers] print('len -', len(students)) print('students -', st..
RePythonOOP 4일차 파이썬의 데이터 모델 , 네임드 튜플 , 속성과 메소드 들 insight 네임드 스페이스를 사용하는 이유 1 (클래스는 비싸고 딕셔너리는 너무 쉽게 변화되는데 값의 네임(키)를 주고 싶을 때) 네임드 스페이스를 사용하는 이유 2 (튜플을 인덱싱으로 접근하는 것을 파이썬 스럽지 못하고 가독성도 떨어져서) 네임드 튜플을 선언 하면서 리스트나 딕셔너리를 인자로 받을 수 있다 네임드 튜플의 메서드들과 값을 수정할 수 있는 메서드도 있다. All Code Info : https://github.com/DevRyu/DaliyCode/blob/master/OOPpython/Day04.py 오늘은 다른 일들로 코딩을 잘못해서 개고생하다가 위의 이미지가 내 마음 같아서 여기 붙였다. 파이썬의 중요한 핵심 프레임워크는 시퀀스(seq),반복(iter),함수(fun),클래스(cla)..