들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item38 요약 Hook 등에 함수를 전달해야할 때, 상태없는 함수의 경우는 함수를 정의해서 사용하는 것이 좋음. 만약 클로저를 이용해 상태있는 함수를 사용해야 한다면, 함수 대신 클래스를 정의해서 사용하는 것이 좋음. (가독성 문제)( 이런 용도로 사용되는 클래스는 '__call__()'을 구현한 Callable 객체를 전달하는 것이 가독성이 좋음. 클래스의 __call__() 메서드를 구현하면 인스턴스를 호출할 수 있음. Effective Python Item 38. 간단한 인터페이스의 경우 클래스 대신 함..
% 두 코드는 같은 패턴 매칭을 의미함. % 즉, ';'는 'orelse'로 동작 sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-> sol(_, _, I1, I2, DP) when I1 == 0; I2 == 0-> % 두 코드는 같은 패턴 매칭을 의미함. % 즉, ','는 'andalso'로 동작 sol(_, _, I1, I2, DP) when I1 == 0 andalso I2 == 0-> sol(_, _, I1, I2, DP) when I1 == 0, I2 == 0->
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item35 요약 throw 메서드를 사용하면 제네레이터가 마지막으로 실행한 yield 식의 위치에서 예외를 다시 발생시킬 수 있음. throw를 사용하면 가독성이 나빠짐. 예외를 잡아내고 다시 발생시키는 데 준비 코드가 필요하며, 내포 단계가 깊어지기 때문. 제네레이터에서 예외를 제공하는 더 좋은 방법은 __iter__() 메서드를 구현하는 클래스를 사용하면, 예외적인 경우에 상태를 전이시킬 수 있도록 메서드를 제공하는 것이다. Item 35. 제네레이터 안에서 throw로 상태를 변화시키지 마라. 제네레이터를..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : 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 ..