* 이 포스팅은 인프런의 '파이썬 중급' 강의를 듣고 요약한 내용임
1. 파이썬 클래스 심화
- 클래스 & 메소드
클래스 기반의 개발은 객체지향 개발법으로 코드 재사용을 통하여 중복을 크게 줄일 수 있다. - 데코레이터
클래스 메소드 : @classmethod
스태틱 메소드 : @staticmethod
(인스턴스나 클래스로 호출이 가능함)
2. 파이썬 데이터 모델
- 매직 메소드
클래스 안에 정의 할 수 있는 특별한 method
- 파이썬의 핵심 구조
built-In : 이미 만들어짐
모든 데이터 타입은 '클래스'임
__add__(), __str__(), __sub__(), __le__(), __ge__() - 데이터 모델 추상화
데이터 모델 설계
- NamedTuple : Tuple + dictionary
키, 값을 튜플로 반환함
- asdict() : Orderdict로 반환 - 시퀸스
- 컨테이너 : 서로 다른 자료형을 담을 수 있음. __contain__ 메서드가 구현되어있음
가변형 : list, deque ...
불변형 : tuple
- 플랫 : 단일 자료형
str, bytes, bytearray, array, memoryview
- comprehend lists : map, filter
- generator
다음번의 반환할 값을 아는 iterator( __iter__ : 연속적인 자료구조. for문에서 사용 가능 )
전체 데이터를 알 필요는 없음. 메모리를 유지할 필요가 없어 성능을 보호할 수 있음.
- 깊은 복사 vs 얕은 복사
list comprehension : 깊은 복사 가능
리스트를 곱하여 copy시 얕은 복사 : 참조주소만 복사됨 - Tuple Advanced
- Unpacking
'*' 문자를 앞에 달아주면 원소들이 공백을 기준으로 하나의 원소로 풀려서 나옴
- Packing
원소들을 묶어서 리스트에 집어넣고 참조변수에 참조시킴
# Unpacking b = (1, 2) print(*b) # => 1 2 출력됨 # Packing x, y, *rest = range(10) print(x, y, rest) print(x, y, *rest) # => 0 1 [2, 3, 4, 5, 6, 7, 8, 9] 출력됨 # => 0 1 2 3 4 5 6 7 8 9 출력됨
- 가변형 vs 불변형
불변형은 수정이 불가하며 계산이 생기면 id값이 계속 바뀜
불변형이므로 새로운 객체를 생산해야 함. - Sort vs Sorted
- Sort : 정렬 후 객체를 직접 변경한다
반환 값 없음. 원본을 정렬함
- Sorted : 정렬 후 새로운 객체 반환
<옵션>
reverse=True (내림차순 정렬)
key = len, str.lower, func, lambda ... (정렬 기준을 정할 수 있음) - 해시테이블
키값은 불변형이여야 함 (+유일성)
-setdefault
new_dict = dict() new_dict.setdefault(1, [2]).append(3) print(new_dict) # {1: [2, 3]} 출력됨
- Immutable Dict 생성
types 모듈의 MappingProxyType 모듈을 사용
read-only이며 딕셔너리를 인자로 받음
dis 모듈 : 선언을 최적화
파이썬 실행 시 파이트코드를 실행함. 어셈블링하여 인터프리터가 바이트코드를 실행함
-> 바이트 코드의 생성순서를 알 수 있음
name 모듈 : 문자열로 바꿔주는 모듈
3. 파이썬 일급 함수
런타임을 초기화
변수할당이 가능함
함수 인수 전달 가능
함수 결과 전달 가능 (함수를 객체 취급함. built-in 함수를 가짐)
- 파이썬 함수
함수형 프로그래밍 : 기능 위주로 분리되어 있음. 순수함수를 지향함
callable : 호출연산자. 메소드 형태로 호출 가능한지 확인
partial : 인수 고정시키고 콜백함수를 사용하여 결과값을 반환받음 - 클로저
외부에서 호출된 함수의 변수값, 상태를 복사 후 저장함
scope : 파이썬의 변수 범위
global변수는 어디서나 접근이 가능하다 (단, 같은 변수가 함수 scope에 있을 때 우선순위는 local변수임)
global변수를 참조하려면 'global' 키워드를 사용함
함수가 끝난 후 scope가 닫혀도 함수내에서 사용했던 값을 기억함. 해당 값은 공유하지만 변경은 불가함(동시성의 성격을 가짐)
값의 변수이름은 '__code__' dict에 있음. 내용은 __closure__[0].cell_contents에 있음
__call__ : 객체 호출 시 불림
'nonlocal' : 지역변수가 아닌 변수라 선언해줌
built_in
-> global
-> enclosed
-> local - 데코레이터
중복을 제거하며 코드를 간결하게 함.
로깅, 프레임워크, 유효성 체크
보통 공통함수로 작성하고 조합하여 사용함
'Python' 카테고리의 다른 글
[Python 고급] 2. Meta class (0) | 2021.08.01 |
---|---|
[Python 고급] 1. variable scope, context Manager (0) | 2021.07.31 |
[Python 중급] 2. 파이썬 병행성 (0) | 2021.07.31 |
[Python 기초] 리스트 축약 표현 (0) | 2021.07.30 |
[Python 기초] 파이썬 자료형 (0) | 2021.07.30 |