들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item34 요약 send()를 이용하면 제네레이터에 데이터를 전송할 수 있음. 즉, 제네레이터와 양방향 소통이 가능함. send() 메서드는 일반적인 이터레이션(For, next())와 다른 방식으로 동작함. 제네레이터가 시작하기 전에 send()를 사용하면, 반드시 None을 입력값으로 전송해야 함. (시작되지 않았기 때문임) 그 이후 send()를 사용할 때는, 원하는 값을 전송할 수 있음. 여러 제네레이터를 합성해서 사용하는 yield from과 send()를 함께 사용하면, 서로 다른 용법 때문에 가독성..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : 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. 왈러스 연산자를 이용해 컴프리헨션 안에서 반복 작업을 피해라. 컴프리헨션에서 같은 계산을 여러 위치에서 공유해서 사용하는 경우가 굉장히 흔하다. 이런 경우에는 반드시 왈러스 연산자를 이용해서 반복된 작업을 줄여줘야한다...