# Python Tricks The Book ## 세줄 요약 - [[assert]]를 써라 - [[NamedTuple]]를 사용하라 ## 클래스 변수 대 인스턴스 변수의 함정 - 클래스 변수는 모든 클래스 인스턴스에서 공유하는 데이터를 위한 변수다. 이 변수는 특정 인스턴스가 아닌 클래스에 속하며 클래스의 모든 인스턴스간에 공유된다. - 인스턴스 변수는 각 인스턴스에 고유한 데이터를 위한 것이다. 개별 객체 인스턴스에 속하며 클래스의 다른 인스턴스 간에 공유되지 않는다. 각 인스턴스 변수는 각 인스턴스에 배정된 고유한 저장소를 갖는다. - 클래스 변수는 동일한 이름의 인스턴스 변수에 의해 `가려질` 수 있기 때문에 (우연히) 덮어써서 버그나 이상한 동작을 유발하기 쉽다. # 5장 파이썬의 일반 데이터 구조 일반적인 데이터 구조에 대한 지식을 쌓기 위해 좋은 책을 찾고 있다면 스티븐 스키너(Steven S. Skiena)의 [[The Alogrithm Design Manual]]을 적극 권한다. ## 5.2 배열 데이터 구조 list: 가변 동적 배열 tuple: 불편 컨테이너 array.array: 기본적인 타입 지정 배열 str: 유니코드 문자의 불변 배열 bytes: 단일 바이트의 불변 배열 bytearray: 단일 바이트의 가변 배열 ## 5.3 레코드, 구조체, 데이터 전송 객체 dict: 간단한 데이터 객체 tuple: 불변 객체 그룹 collections.namedtuple: 편리한 데이터 객체 typing.NamedTuple: 개선된 네임드튜플 struct.Struct: 직렬화된 C 구조체 types.SimpleNamespace: 세련된 속성 접근 # 6장 반복과 이터레이션 이터레이터는 컨테이너의 내부 구조와 완전히 분리된 상태에서 컨테이너의 모든 항목을 처리할 수 있는 공통 인터페이스를 제공한다. ```python class Repeater: def __init__(self, value): self.value = value def __iter__(self): return self def __next__(self): return self.value ``` ```python def repeater(value): while True: yield value ``` 제너레이터 함수는 파이썬의 훌륭한 기능이므로 자신의 프로그램에서 제너레이터 함수를 사용하는 것을 주저해서는 안 된다. 요점 정리 - 제너레이터 함수는 이터레이터 프로토콜을 지원하는 객체를 작성하기 위한 간편 문법이다. 제너레이터는 클래스 기반 이터레이터를 작성할 때 필요한 상용구 코드 대부분을 추상화한다. - [[yield]] 문을 사용하면 제너레이터 함수 실행을 일시적으로 중단하고 값을 되돌려 줄 수 있다. - 제어 흐름이 yield문 이외의 방법으로 제너레이터 함수를 떠나면 제너레이터는 [[StopIteration]] 예외를 발생시키기 시작한다. ## 제너레이터 표현식 제너레이터 표현식 때 리스트 내포식 ```python listcomp = ['hello' for i in range(3)] genexpr = ('hello' for i in range(3)) ``` # 7장 딕셔너리 트릭 [[EAFP]] (Easier to Ask for Forgiveness than Permission) - 허가보다는 용서를 구하는 것이 쉽다 ```python def greeting(userid): try: return 'Hi %s!' % name_for_userid[userid] except KeyError: return 'Hi there' ``` ```python def greeting(userid): return 'Hi %s!' % name_for_userid.get(userid, 'there') ``` # 8장 파이썬다운 생산성 향상 기법 요점 정리 - 내장된 [[dir()]] 함수를 사용하여 인터프리터 세션에서 파이썬 모듈과 클래스를 대화식으로 탐색할 수 있다. - [[help()]]가 내장되어 있어 인터프리터에서 바로 문서를 찾아볼 수 있다(q를 누르면 종료된다.) ## 9.1 파이썬 개발자를 위한 무료 주간 팁 dbader.org/newsletter