들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item33 요약 yield from을 사용하면 여러 제네레이터를 합성해서 하나의 제네레이터를 만들 수 있음. 직접 내포된 제네레이터를 이터레이션하면서 각 제네레이터의 출력을 내보내는 것보다 yield from을 사용하는 것이 성능 면에서 더 좋음. yield from def get_generator(): k = list(range(10)) for v in k: yield v def generator(): for v in ["a", "b", "c"]: yield v yield from [1, 2, 3] yield ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item32 요약 리스트 컴프리헨션에서 입력이 크면 메모리 문제가 발생할 수 있음. 제네레이터 식은 한 번에 제네레이터가 반환되기 때문에 메모리를 효율적으로 사용할 수 있음. 제네레이터 식에 다른 제네레이터를 내포할 수 있음. 이를 통해 여러 제네레이터를 하나로 합성할 수 있음. 각 제네레이터는 상태를 가지기 때문에 이 부분을 유의해서 사용해야 함. 합성된 제네레이터 식은 매우 빠르게 실행되며 메모리도 효율적으로 사용함. Item 32. 긴 리스트 컴프리헨션보다는 제네레이터 식을 사용하라. # 리스트 컴프리헨션 사..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item30 요약 제네레이터를 사용하면 결과를 리스트에 합쳐서 반환하는 것보다 더 깔끔함. 제네레이터를 사용하면, 결과를 리스트로 반환하는 것에 비해 적은 메모리로 작업 가능함. (OOM Kill 방지) 처음 제네레이터 함수가 호출되면 이터레이터가 반환됨. 반환된 이터레이터를 next()로 호출할 때 마다 yield부터 다시 시작함. 제네레이터가 반환하는 이터레이터는 상태가 있기 때문에 재사용이 불가능하다는 것을 염두해야함. Item 30. 리스트를 반환하기보다는 제너레이터를 반환하라. 파이썬으로 코드를 작성할 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item29 요약 왈러스 연산자를 이용해 컴프리헨션에서 반복 작업을 제거할 수 있음. 이를 통해 가독성 + 성능 향상이 가능함. 컴프리헨션에서 왈러스 연산자를 통해서 선언된 변수는 컴프리헨션 외부 Scope으로 노출됨. 이 부분을 고려해야함. (다른 변수를 오염시킨다거나 하는 부분) Item 29. 왈러스 연산자를 이용해 컴프리헨션 안에서 반복 작업을 피해라. 컴프리헨션에서 같은 계산을 여러 위치에서 공유해서 사용하는 경우가 굉장히 흔하다. 이런 경우에는 반드시 왈러스 연산자를 이용해서 반복된 작업을 줄여줘야한다...
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item16 요약 딕셔너리에 특정 Key에 접근해야하고, 특정 Key가 존재하지 않을 때 기본값을 정의하고 싶다면 항상 get()을 사용해라. sefdefault를 사용하는 것이 더 좋은 경우가 있다면, defaultdict을 사용해라. Item16. 딕셔너리 Key에 대한 접근은 get을 사용하라 딕셔너리에서 특정 Key에 해당되는 Value를 불러온다고 가정해보자. 그러나 특정 Key가 딕셔너리에 없는 경우가 있을 수 있고, 이럴 때 '기본값'을 사용하고 싶을 때가 있다. 이런 경우를 다루기 위해서 크게 4가지..