Python

[Python 중급] 1. 파이썬 클래스, 시퀸스, 일급함수

noahkim_ 2021. 7. 31. 15:09

* 이 포스팅은 인프런의 '파이썬 중급' 강의를 듣고 요약한 내용임

 

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

  • 데코레이터 
    중복을 제거하며 코드를 간결하게 함.
    로깅, 프레임워크, 유효성 체크 

    보통 공통함수로 작성하고 조합하여 사용함